2015-01-20 3 views
5

С нормальной модели представления я могу вызвать функцию после инициализации вне него это контекст так:Вызов функции компонента при инициализации в Knockout

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

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

vm.Foo(); 

http://jsfiddle.net/h01ky3pv/

Как сделать что-то подобное с модель представления компонентов? Я хочу вызвать функцию FooComponentViewModelFoo при первом загрузке компонента 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/

ответ

4

Просто идея, передать функцию обратного вызова в качестве параметра для компонента:

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

Никогда не думал об этом. Хорошая идея! Подождите несколько, чтобы увидеть, есть ли другие идеи. Спасибо – kspearrin

+0

Как насчет случаев, когда мы хотим вызвать метод компонента. Пусть наш ComponentVm предоставляет метод doSmth (arg1, arg2). Есть ли у вас какие-либо мысли о том, как получить доступ к этому методу вне компонента в соответствии с идеей нокаута? – DotNetter