javascript - Backbone 模型虚拟属性?

标签 javascript backbone.js

我的 Backbone 模型中需要虚拟属性,但 Backbone 似乎不支持这一点,我将如何自己实现这一点。

虚拟属性是指仅在客户端维护的属性,不保存/同步到服务器。我想用它们来存储仅与客户端 View 渲染相关的状态信息,例如是否选择/检查模型。我将在 View 的模板呈现中使用模型属性,但我不希望将这些值发送到服务器,或保存在数据库中。

最佳答案

如果你只想在客户端存储模型的属性,为什么不直接使用: model.set({attribute: "client-side only"}) 代替: model.fetch()

为避免触发变更事件,可以传入: model.set({silent:true}) 尽管文档不推荐这样做。如果您更喜欢冒险,您也可以重写 set 方法使其真正静音,如本答案中所述:

Truly change a model attribute silently in Backbone.js?

更新:

环顾四周: Backbone.js partial model updateExclude model properties when syncing (Backbone.js)

看起来您拥有的最简单的选择是: model.save(model.changedAttributes(), {patch: true});

或者如果您需要以一种良好的 restful 方式创建/更新这些对象,您可以像这样覆盖主干sync:

 Backbone.Model.extend({

  // Overwrite save function
  save: function(attrs, options) {
   options || (options = {});

    // Filter the data to send to the server
    delete attrs.selected;
    delete attrs.dontSync;

    options.data = JSON.stringify(attrs);

    // Proxy the call to the original save function
    Backbone.Model.prototype.save.call(this, attrs, options);
  }
});

图片来源:Simon Boudrias

关于javascript - Backbone 模型虚拟属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23597262/

相关文章:

javascript - 使用 requirejs 编译 javascript 程序以删除 require 依赖

javascript - 提供 map 瓦片包供离线使用

backbone.js - 如何布局复杂的应用程序及其 View /区域/布局

javascript - 在 Chaplin js 框架中,以 ! 为前缀的事件是做什么的?意思?

javascript - 如何从确认对话框插件返回 bool 值?

javascript - jQuery 按键和值对 JSON 进行计数(这个函数可以工作吗?)

javascript - setTimeout()/setInterval() 将不会执行。 **我正在传递函数对象 - 不执行该函数

javascript - RequireJS 未捕获错误 : Mismatched anonymous define() module

javascript - Backbone.js - 一个 View 应该如何更新多个 HTML 元素?

javascript - Backbone 的内部使用什么类型的事件?