Backbone.js在保存之前修改模型中的数据

时间:2012-08-15 05:57:43

标签: javascript backbone.js

当我在模型上调用setsave方法时,我想知道如何转换数据。特别是将输入的日期字符串转换为纪元时间。

我知道我可以在视图中转换它,但据我所知,我的验证效果不会很好。

如果您有兴趣,型号代码为here

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

我可以收集你有两个选择:

1在您的视图中转换它们

这意味着您可以为视图滚动自己的转化,或使用Backbone.modelbinder之类的内容为您进行转化。然后,您必须修改验证方法以接受纪元日期。我个人更喜欢这个,我认为它适合用户界面处理验证用户输入的良好构造和转换到正确的单位,并让模型处理验证值是否在可接受的限制范围内。

2在模型中转换它们

Backbone不提供这种开箱即用的功能。如果您将某些内容设置为某种内容,则无法轻松将其转换为其他内容,尤其是在validateset之间。基本上你最好的选择是使用像

这样的东西来推动自己的set功能
// Inside the set function
...
if (!this._validate(attrs, options)) return false; // real line in the set func
// insert something like this, after validate you know the values are eligible for conversion
attrs = this.convert(attrs); // a custom func that converts attributes to right units
...
// set continues as usual

希望这有帮助!

答案 1 :(得分:1)

您可以覆盖模型中的同步方法:

, sync: function(method, model) {
    if(method === 'update'){
        // change you model here
    }
}

这将调用bevor数据发送到后端服务器。 "方法" indecates'创造'或者'更新'。

答案 2 :(得分:-1)

根据消息来源,validate是在设置和保存之前调用的唯一回调。 您可以直接在属性对象上设置validate方法中的值。很遗憾,此时您无法对属性进行任何更改。

您可以使用backbone.getters.setters之类的插件来执行此操作,因为它看起来像是won't be a feature添加到主干网。