我想在Backbone视图中创建基于Rails模型的表单字段以及Rails模型验证,而不需要模板。为了实现这一点,我使用了JBuilder,如:
1 json.(@recipient, :firstName,
2 :lastName,
3 :street1,
4 :street2,
5 :city,
6 :state,
7 :zip,
8 :phone1,
9 :phone2)
10 json.required Recipient.validators[0].attributes
11 json.fields Recipient.accessible_attributes.reject {|x| x==""}
12 json.states [
13 ['Alabama', 'AL'],
14 ['Alaska', 'AK'],
15 ['Arizona', 'AZ'],
16 ['Arkansas', 'AR'],
...
64 ['Wyoming', 'WY']
65 ]
我相信你可以看到我要去哪里......
因此,目标是迭代字段并将DOM输入附加到DOM,相应地为model.required数组设置样式。当然,states字段可以动态地为选择状态选择插入选项。验证肯定只是由服务器响应错误执行(不是真的关心在客户端上做,但我想我可以)只需读取错误响应。
所以问题,我想是:
1)我是否只是在View构造函数中实例化Backbone模型?
2)你会这样做:
this.model.fetch({url:'/recipients/new',
success:function(index,model)
{
this.model = model.responseText
}
});
更好的方法吗? 我确实看到powmedia/backbone-forms虽然对我来说似乎是双重工作以及我必须解决的其他事情,当然,我必须在客户端重新定义所有内容。
如果没有更多的话,至少这会成为其他有相同想法的人的参考点(我找不到任何相关内容)
coffescript:
1 class Senditbacklater.Models.Recipient extends Backbone.Model
2
3 url: '/recipients'
4
5 initialize: ->
6 $.getJSON('/recipients/new', (data) =>
7 $.each(data, (key,val) =>
8 obj = {}
9 obj[key] = val
10 this.set(obj)
11 )
12 )
然后我应该好好去创建视图渲染中的表单
答案 0 :(得分:0)
您的情况并不特别,在改变您的观点时您唯一需要做的事情是:您只需要处理从服务器提取的Model
和呈现在View
。
渲染非常复杂,这是真的,你必须使用你的View代码来解决它。
您可以尝试这样的事情:
// code simplified and no tested
var MyForm = Backbone.Model.extend({
url: "/recipients/new"
});
var MyFormView = Backbone.View.extend({
initialize: function(){
this.model.on( "reset", this.render, this );
},
render: function(){
_.each( this.model.fields, function( field ){
this.$el.find( ".fields" ).append( "<label>" + field + "</label><input name=\"" + field + "\" />" );
}, this );
// ... more render logic here
return this;
}
});
var myForm = new MyForm();
var myFormView = new MyFormView({ el: "#form", model: myForm });
此代码依赖于以下HTML:
<form id="form">
<div class="fields"></div>
</form>
当然这是一个非常简化的示例,还有更多优雅的解决方案,例如在子视图中为任何字段系列委派但是我只想给你一个起点。