在我的Backbone视图中,我希望能够立即将我的模型添加到我的集合中,并在新创建的模型中包含'id'
属性。换句话说,我需要立即访问此'id'
。在id
可用的情况下,我的removeCategory
方法可以正常运行。要解决问题"这个问题,我尝试在this.collection.fetch()
下面添加一行this.collection.add(model);
,但它给了我非常糟糕的用户界面(新的<li>
甚至不会渲染等等),加上它无论如何,这似乎是非常糟糕的编码练习。
我对Backbone相对比较新,所以我不确定create
(保存/添加)是否应该自动将模型添加到带有id
的集合中。如果它应该,那么我从Rails RESTful API接收的JSON数据肯定有问题。如果create
没有这样做,那么我怎样才能立即访问这个特定的新创建的模型,使用id
(除了刷新浏览器 - 呃!)?我一调用&#34; addCategory&#34;我就在我的Handlebars模板中需要id
<li data-id={{id}}></li>
model.fetch();
方法
另外(&amp;这可能是一个相关的问题),当我做id
时,我会回到模型的整个集合,再加上新创建的服务器端模型没有{{1} }}。对此有任何帮助将非常感激。
window.CategoriesView = Backbone.View.extend({
index_template: HandlebarsTemplates['categories/index'],
events: {
'click .delete': 'removeCategory',
'click .category_add': 'addCategory'
},
initialize: function() {
_.bindAll(this, 'render');
this.collection.fetch();
this.listenTo(this.collection, 'all', this.render);
},
show: function() {
$("#categorymodal").modal();
},
addCategory: function(e) {
e.preventDefault();
// I wrote the next three lines here explicitly rather than using 'create'
var model = new Category({ name: $(this.el).find('.category_name').val() });
model.save();
this.collection.add(model);
this.show();
},
removeCategory: function(e) {
e.preventDefault();
var id = $(e.target).parents('li').data('id');
var model = this.collection.where({ id: id })[0];
this.collection.remove(model);
if (model) { model.destroy(); }
this.render();
},
render: function() {
$(this.el).html(this.index_template());
this.collection.models.forEach(function(cat) {
var li_template = HandlebarsTemplates['categories/show']
$(this.el).find('.categories').append(li_template({
id: cat.toJSON().id,
name: cat.toJSON().name
}));
}, this);
return this;
}
});
以下是我在Rails中的#create
操作....
def create
@category = Category.create(category_params)
render :nothing => true
end
我正在使用jbuilder
来提供Rails API中的JSON。
这是我的Backbone模型和集合......
window.Category = Backbone.Model.extend({
urlRoot: "categories"
});
window.Categories = Backbone.Collection.extend({
model: Category,
url : function() {
return 'categories';
}
});
答案 0 :(得分:1)
我发现了我的问题。它在我的Rails控制器中,而不是Backbone create
。我改变了#create
行动......
def create
@category = Category.create(category_params)
render :nothing => true
end
......对此......
def create
@category = Category.create(category_params)
redirect_to category_path(@category)
end
......我的表演行动就是这个......
def show
@category = Category.find(params[:id])
end
......这为我提供了http://localhost:3000/categories/752.json
。我必须确保我的后端提供我需要JSON的东西!