2017-10-18 194 views
1

我使用requirejs/crossroads设置。敲除:更改可观察值

这是我的引导与一些全局属性:

ko.applyBindings({ 
    route: router.currentRoute, 
    user: { 
     ... 
    }, 
    ... 
    loading: ko.observable(false), 
    setLoadingState: function(newState) { 
     this.loading(newState); 
    } 
}); 

当调用从组件setLoadingState功能(通过PARAMS通过),它告诉我,loading不是函数/ undefined

实现这种机制的正确方法是什么?

回答

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));

+1

重要:我可以直接调用它,有没有必要的类。你想改变你的例子的顺序吗?也许别人不会注意到。非常感谢您的不同解决方案。 – sandrooco