簡體   English   中英

淘汰賽:改變可觀察的價值

[英]Knockout: Change observable value

我使用requirejs / crossroads設置。

這是我的一些全局屬性的引導:

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

當從組件調用setLoadingState函數(通過params傳遞)時,它告訴我loading不是函數/ undefined

實施此類機制的正確方法是什么?

請注意,在您的(簡化?)示例中,您不需要其他方法,因為它只轉發到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)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM