我使用requirejs / crossroads设置。
这是我的一些全局属性的引导:
ko.applyBindings({
route: router.currentRoute,
user: {
...
},
...
loading: ko.observable(false),
setLoadingState: function(newState) {
this.loading(newState);
}
});
从组件调用setLoadingState
函数(通过params传递)时,它告诉我loading
不是函数/ undefined
。
实施此类机制的正确方法是什么?
答案 0 :(得分:3)
请注意,在您的(简化?)示例中,您不需要其他方法,因为它只转发到loading
,可以直接调用。
使用类似模式的类来确保this
引用您的视图模型,如下所示:
var MyApp = function(router) {
this.route = router.currentRoute,
this.loading = ko.observable(false);
};
MyApp.prototype.setLoadingState = function(newState) {
this.loading(newState);
};
ko.applyBindings(new MyApp(router));
(您也可以使用更现代的class
语法)
或者,通过“工厂”功能使用普通对象:
var MyApp = function(router) {
var route = router.currentRoute,
var loading = ko.observable(false);
var setLoadingState = function(newState) {
loading(newState);
};
// Expose what you want to expose:
return {
loading: loading,
setLoadingState: setLoadingState
};
};
ko.applyBindings(MyApp(router));