2015-01-20 21 views
5

Với một mô hình xem bình thường tôi có thể gọi một chức năng sau khi khởi tạo bên ngoài của nó là bối cảnh như vậy:Gọi chức năng thành phần khi khởi tạo trong Knockout

var ViewModel = function() { 
    this.Foo = function() { 
     alert("bar"); 
    }; 
}; 

var vm = new ViewModel(); 
ko.applyBindings(vm); 

vm.Foo(); 

http://jsfiddle.net/h01ky3pv/

Làm thế nào để làm điều gì đó như thế này với một mô hình xem của thành phần? Tôi muốn gọi FooComponentViewModel 's Foo chức năng khi thành phần foo được nạp đầu tiên.

ko.components.register("foo", { 
    viewModel: FooComponentViewModel, 
    template: { 
     element: "component-foo" 
    } 
}); 

function FooComponentViewModel(params) { 
    this.Foo = function() { 
     alert("bar"); 
    }; 
} 

var ViewModel = function() { 
    // empty 
}; 

var vm = ViewModel(); 
ko.applyBindings(); 

http://jsfiddle.net/r3d41q6c/2/

Trả lời

4

Chỉ cần một ý tưởng, vượt qua một callback như một tham số cho các thành phần:

HTML:

<foo params="callback: callback"></foo> 

JS:

function FooComponentViewModel(params) { 
    this.Foo = function() { 
     alert("bar"); 
    }; 

    params.callback(this); 
} 

function ViewModel() { 
    this.callback = function(vm) { 
     vm.Foo(); 
    }; 
} 

http://jsfiddle.net/r3d41q6c/3/

+0

Không bao giờ nghĩ về điều này. Ý tưởng tốt! Sẽ chờ đợi một vài để xem có ý tưởng nào khác không. Cảm ơn – kspearrin

+0

Còn các trường hợp khi chúng ta muốn gọi phương thức của thành phần. Hãy để ComponentVm của chúng ta trưng ra phương thức doSmth (arg1, arg2). Bạn có bất kỳ suy nghĩ về cách truy cập vào phương pháp này bên ngoài thành phần theo hệ tư tưởng loại trực tiếp? – DotNetter

Các vấn đề liên quan