防止Backbone.js模型在首次添加到集合时进行验证

时间:2012-03-09 12:30:48

标签: backbone.js

首次创建新模型时,有没有办法在Backbone.js中抑制模型验证?

在我的应用程序中,我有一个包含任意数量模型的集合,这些模型表示为列表项。用户可以单击每个项目上的按钮,在当前项目下方插入新的空项目。显然,空项目验证失败,因为我不希望以后保存空项目。

当我创建新项目时,我无法知道可能的默认值,因此使用有效数据预先填充新模型似乎不是一个选项。

有什么建议吗?

更新:在处理与切向相关的问题时,我意识到我使用的是Backbone.js版本0.9.0。当这个版本发布时,其他人遇到了同样的问题,他们在GitHub上this issue抱怨。

Jeremy修改了0.9.1中的验证以解决此问题。将(临时)空模型添加到集合中是一个有效的实际用例。您可以在视图中处理新的空模型,但是如果您正在管理像我这样的项目列表,那么除了您的必须收集之外,这会强制您拥有项目视图的集合(包括空的项目视图)。有效的模型。对于一个原本简单的场景来说,这是一个非常笨重的解决方法。很高兴这个问题得到解决。

2 个答案:

答案 0 :(得分:3)

你不应该添加无效模型:​​)

在Backbone源代码(至少0.9.1)中挖掘一点,表明可以通过将选项传递给add方法来规避机制:

var Mod=Backbone.Model.extend({
    validate: function(attrs,opts) {
        if (opts.init) return;
        return "invalid";
    }
});

var Col=Backbone.Collection.extend({
    model:Mod
});

var c=new Col();
c.add({},{init:true});

console.log(c.length);

小提琴:http://jsfiddle.net/jZeYB/

警告:它可能会破坏线路。

答案 1 :(得分:2)

您是否需要立即将模型添加到集合中?我认为验证失败是因为你立即将它添加到集合中。

相反,按下按钮时,您可以创建视图和空白模型。模型验证后,将其添加到集合中。您需要在新行上使用提交按钮/机制将其添加到集合(自动调用验证)。