3

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

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

模型代码在这里,如果您有兴趣。

谢谢你的帮助!

4

3 回答 3

3

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

1 在您的视图中转换它们

这意味着您可以为视图滚动自己的转换,或者使用 Backbone.modelbinder 之类的东西为您进行转换。然后你必须修改你的验证方法来接受一个纪元日期。我个人更喜欢这个,我认为它适合 UI 来处理验证用户输入的格式正确并转换为正确的单位,并让模型处理验证值是否在可接受的范围内。

2 在您的模型中转换它们

Backbone 不提供这种开箱即用的功能。如果您将某物设置为某物,则没有简单的方法将其转换为其他东西,尤其是在validateand之间set。基本上你最好的选择是set使用类似的东西来推出你自己的 -function

// 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

希望这可以帮助!

于 2012-08-15T08:15:21.053 回答
1

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

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

这将在数​​据发送到后端服务器之前调用。“方法”表示“创建”或“更新”。

于 2015-01-15T08:41:59.507 回答
-1

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

您可以使用像backbone.getters.setters这样的插件来执行此操作,因为它看起来不会是添加到主干的功能。

于 2012-08-15T07:52:54.917 回答