【问题标题】:Updating Backbone Model Attributes Dynamically动态更新主干模型属性
【发布时间】:2016-02-22 09:06:35
【问题描述】:

我有一个模型,它是集合的一部分并从 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 还是有点缺乏经验。

谢谢。

【问题讨论】:

    标签: model-view-controller backbone.js attributes models


    【解决方案1】:

    您可以设置status的初始值,并在模型初始化时监听updatedDate或lastUpdateAttempt的进一步变化。

    类似

    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')这样的状态

    【讨论】:

    • 这成功了!但是,我仍然遇到的一个问题是在 fetch() 上,不会调用 updateStatus()。所以我在调用 updateStatus() 的集合中添加了一个“添加”事件监听器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多