2015-11-20 92 views
0

我有一个模型,它是集合的一部分,并从api中检索数据。此模型包含(除其他属性)以下属性:动态更新主干模型属性

updatedDate //-> value retreived from API/DB 
lastUpdateAttempt //-> value retrieved from API/DB 
status //-> value NOT retrieved from API/DB, depends on values of above two attributes ("updated", "error", "out of date", etc...). 

我的问题是,如何/何时应该设置状态属性?有没有一种方法可以在尝试检索值时动态设置状态? (即modelObj.get(“status”) - >调用函数来计算值,返回结果)。或者我应该从视图中调用一个函数来初始化更新这个属性,然后添加一个事件监听器,这个监听器在变化时也是这样做的? (< - 不知何故似乎不是最好的解决方案)

我有一种感觉,我正在推翻这一点,并且有一个真正实用的方法来做到这一点,但我对Backbone仍然有点缺乏经验。

谢谢。

回答

0

您可以设置状态的初始值,并在初始化模型时侦听对updatedDatelastUpdateAttempt的进一步更改。

喜欢的东西

Backbone.Model.extend({ 
    initialize: function(){ 
    this.updateStatus(); 
    this.on("change:updatedDate change:lastUpdateAttempt",this.updateStatus); 
    }, 
    updateStatus: function(){ 
    // your logic 
    } 
}); 

或者你可以尝试这种奇怪的方式(不是在所有测试,只是一个念头),这有点像更新状态,同时访问它。如果你想控制状态更新的频率可能会有所帮助。 (如果你很可能会进入状态比变化的数量少的方式很可能与其他两个属性发生)

Backbone.Model.extend({ 
    initialize: function(){ 
    this.updateStatus(); 
    this.on("updateStatus",this.updateStatus); 
    }, 
    updateStatus: function(){ 
    // your logic 
    } 
}); 

和访问状态一样,model.trigger('updateStatus').get('status')

+0

这个工作!然而,我仍然有一个问题是在fetch(),updateStatus()不会被调用。所以我给调用updateStatus()的集合添加了一个“add”事件监听器, –