【问题标题】:backbone.js model.clear with no defaults没有默认值的backbone.js model.clear
【发布时间】:2012-09-05 21:39:55
【问题描述】:

当我创建一个新的主干.js 模型时,“默认值”中的属性不会被忽略,它们会成为我模型的初始值。
为什么当我在模型上调用“清除”时它们会被忽略。
这背后有什么原因吗?
为什么我需要一个状态,当我有“默认值”时,我的模型的所有属性都是 0 或“”(空格)?
任何人都可以给我一个真实的例子吗?

例如,在我的一个模型中,有一个名为“status”的属性。初始值为“x”,但用户可以将其更改为“b”或“u”。 ""(空格) 不是有效值。因此在模型中,我有

 defaults: {
   "status":  "x"
 }

在细节组件中,用户可以编辑模型的值,他有一个名为“擦除”的按钮。当他这样做时,模型将获得初始状态。在这种情况下,我永远不需要将所有属性设置为零或空格的函数。

如果模型具有“默认值”,那么对于主干.js 作者来说,检查“清除”方法会很容易,如果有,则删除所有值,然后获取默认值。

提前非常感谢
沃尔夫冈

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    有类似的需求。因为框架的作者自己不使用它们,所以他们无法预见所有现实世界的用例。最好直接问https://github.com/documentcloud/backbone

    无论如何,它是javascript

    Backbone.Model.prototype.resetToDefaults = function() {
        this.clear();
        this.set(this.defaults);
    };
    

    【讨论】:

    • 我更喜欢这种重写的 clear() 方法,只是为了保持默认行为不变,并且不会混淆从事同一项目的任何其他开发人员。
    【解决方案2】:

    如果你不喜欢它覆盖它

    var Model = Backbone.Model.extend({
      clear: function(options) {
        Backbone.Model.prototype.clear.apply(this, arguments); // or something like this
        return this.set(_.clone(this.defaults));
      }
    });
    

    现在您可以使用自定义模型作为所有模型的基础

    var MyModel = Model.extend({...});
    

    如果做这种快速的事情让您感到困扰,您可以将其发布到backbone.js' git issues

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      相关资源
      最近更新 更多