2015-01-20 2 views
5

Mit einem Modell Normalansicht ich außerhalb davon eine Funktion nach der Initialisierung aufrufen Kontext wie folgt:Anruf Komponente Funktion bei der Initialisierung in Knockout

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

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

vm.Foo(); 

http://jsfiddle.net/h01ky3pv/

Wie mache ich so etwas wie dies mit einem Ansichtsmodell der Komponente? Ich möchte 's Foo Funktion aufrufen, wenn die foo Komponente zuerst geladen wird.

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/

Antwort

4

Nur eine Idee, einen Rückruf als Parameter für die Komponente zu übergeben:

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

Niemals darüber nachgedacht. Gute Idee! Werde ein paar warten, um weitere Ideen zu sehen. Danke – kspearrin

+0

Was ist mit Fällen, wenn wir Methode der Komponente aufrufen möchten. Lassen Sie unser ComponentVm die Methode doSmth (arg1, arg2) verfügbar machen. Haben Sie irgendwelche Gedanken darüber, wie Sie Zugriff auf diese Methode außerhalb der Komponente erhalten, je nach der Knockout-Ideologie? – DotNetter