Backbone形成奇怪的bug /行为

时间:2014-10-20 08:23:42

标签: javascript forms backbone.js backbone-forms

附图:

我编写自定义主干编辑器,但Backbone无法对其进行初始化,因为无法找到它的架构。 Backbone在Form.editors的{​​{1}}数组中查找架构? 如何注册自定义编辑器的架构?

具体:

我使用Backbone Forms,它以下一种方式初始化:

骨架forms.js

backbone-forms.js

问题:当Backbone创建新表单时,它会调用var Form = Backbone.View.extend({ initialize: function(options) { //..... //Check which fields will be included (defaults to all) var selectedFields = this.selectedFields = options.fields || _.keys(schema); _.each(selectedFields, function(key) { var fieldSchema = schema[key]; fields[key] = this.createField(key, fieldSchema); // <==== Here troubles begins }, this); }, //.... }, { //.... editors: {} // <===== QUESTION: where I should put my custom editor in this array??? }); 方法,如下所示:

createSchema

Form.editors [schema.type]未定义。这意味着我无法创建/渲染我的自定义编辑器!

问题: 我在 createSchema: function(schema) { //........ //PROBLEM: Form.editors[schema.type] is undefined schema.type = (_.isString(schema.type)) ? Form.editors[schema.type] : schema.type; return schema; } 数组中注册自定义编辑器的位置/方式

1 个答案:

答案 0 :(得分:0)

您可以直接从架构中引用自定义编辑器,即引用函数本身而不是字符串:

var CustomEditor = Backbone.Form.editors.Base.extend({});

var form = new Backbone.Form({
  schema: {
    customField: { type: CustomEditor }
  }
});

或者,就像您找到的那样,您也可以将编辑器添加到Backbone.Form.editors,以便您可以将字符串用作快捷方式。