2017-10-18 124 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

相關問題