2015-01-20 11 views
5

Przy normalnym modelu widoku mogę wywołać funkcję po inicjalizacji poza nim jest kontekst tak:połączeń funkcja składowa po inicjalizacji w Knockout

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

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

vm.Foo(); 

http://jsfiddle.net/h01ky3pv/

Jak zrobić coś takiego z model widoku komponentu? Chcę wywołać funkcję FooComponentViewModel 'Foo po załadowaniu komponentu Foo.

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/

Odpowiedz

4

tylko pomysł, przekazać jako parametr wywołania zwrotnego dla składnika:

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

Nigdy o tym nie myślałem. Dobry pomysł! Poczeka kilka, aby zobaczyć, czy jakieś inne pomysły. Dzięki – kspearrin

+0

Co z przypadkami, gdy chcemy wywołać metodę komponentu. Niech nasze ComponentVm udostępnia metodę doSmth (arg1, arg2). Czy masz jakieś przemyślenia na temat tego, jak uzyskać dostęp do tej metody poza komponentem zgodnie z ideologią nokautu? – DotNetter

Powiązane problemy