0

我有一个附加到具有“标题”属性的模型的视图。我希望能够在每次设置时修剪该值(出于某种模糊的原因,我不想在服务器端执行此操作)。在我的模型中,我尝试了这个:

this.on('change:title', this.trimName);
//... later on
trimName: function(){
    console.log('triggered');
    this.set({'title':$.trim(this.get('title'))}, {silent:true});
}

但这会触发无限递归。(另外,递归不会发生在 jsfiddle 上,为什么?)。

提前致谢。

4

1 回答 1

2

让模型进行修剪:在修剪后覆盖set方法和运行方法Backbone.Modelset

请注意,这并没有完全清除以处理对象文字,您需要自己实现。这将适用于key, value, option参数。查看set Backbone源代码中的方法示例:http ://backbonejs.org/backbone.js

set: function(key, value, options) {
      var attrs;

      // Handle both `"key", value` and `{key: value}` -style arguments.
      if (_.isObject(key) || key == null) {
        attrs = key;
        options = value;
      } else {
        attrs = {};
        attrs[key] = value;
      }

      options = options || {};
      if ( options.trim ) {
          attrs[key] = $.trim( attrs[key] );
      }
      // do any other custom property changes here

      Backbone.Model.prototype.set.call( this, attrs, options ); 
}
于 2012-07-03T17:50:17.457 回答