Javascript Backbone.js在保存前修改模型中的数据
当我在模型上调用Javascript Backbone.js在保存前修改模型中的数据,javascript,backbone.js,Javascript,Backbone.js,当我在模型上调用set或save方法时,我想知道如何转换数据。专门将输入的日期字符串转换为历元时间 我知道我可以在视图中转换它,但据我所知,这在我的验证中不会很好地工作 如果您感兴趣,请参阅模型代码 谢谢你的帮助 根据来源,validate是在set和save之前调用的唯一回调。您可以直接在attributes对象上设置validate方法中的值。不幸的是,此时无法对属性进行任何更改 您可以使用类似的插件来执行此操作,因为它看起来像是添加到主干中的插件。我可以收集到的信息有两个选项: 1在您的视
set
或save
方法时,我想知道如何转换数据。专门将输入的日期字符串转换为历元时间
我知道我可以在视图中转换它,但据我所知,这在我的验证中不会很好地工作
如果您感兴趣,请参阅模型代码
谢谢你的帮助 根据来源,validate是在set和save之前调用的唯一回调。您可以直接在attributes对象上设置validate方法中的值。不幸的是,此时无法对属性进行任何更改
您可以使用类似的插件来执行此操作,因为它看起来像是添加到主干中的插件。我可以收集到的信息有两个选项: 1在您的视图中转换它们 这意味着您可以为视图进行自己的转换,或者使用类似Backbone.modelbinder的东西为您进行转换。然后,您必须修改验证方法以接受纪元日期。就我个人而言,我更喜欢这个,我认为它适合UI处理验证用户输入的良好格式和转换到正确的单元,并让模型处理验证值是否在可接受的范围内 2在模型中转换它们 主干网不提供这种开箱即用的服务。如果将某个对象设置为某个对象,则无法轻松地将其转换为其他对象,尤其是在
验证
和设置
之间。基本上,你最好的选择是使用类似于
// 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
希望这有帮助 您可以覆盖模型中的同步方法:
, sync: function(method, model) {
if(method === 'update'){
// change you model here
}
}
这将是调用bevor数据发送到后端服务器。“方法”表示“创建”或“更新”。顺便说一句,您测试的数量为空twiceIt似乎是主干网根据我在源代码和测试中收集的数据为验证方法创建了attributes对象的副本,因此不幸的是,这不起作用。
attrs=uu.extend({},this.attributes,attrs)代码>直接引用源代码,因此无需修改validate
@jake中的attributes对象,jake是传递给validate方法的属性集。您仍然可以访问this.attributes,并且仍然可以更改这些属性。汤姆,你有没有尝试过修改这个.attributes,而不是那些作为参数传递给你以进行验证的属性?@tanzeebkhali我有,但它似乎不起作用(或者我做错了什么)这样做是行不通的,因为属性将在验证后设置,所以在验证期间设置为您想要的->它们设置为传递给set AfterwardsHanks Jake的原始值。你的答案似乎是最合适的解决方案。此后,我决定重新考虑流程,不再需要重新设置任何属性的格式,尽管您可能也可以在更改时做一些事情:触发属性事件,它由set和save触发(如果您将属性传递给它),这是主干网本身推荐的方法。看&