我是Backbone的新手,我无法理解如何设置View的属性。我正在使用没有模型的视图。
这是视图:
var OperationErrorView = Backbone.View.extend({
attributes: {},
render: function(){
var html = "<h3>" + this.attributes.get("error") +"</h3>";
$(this.el).html(html);
}
})
然后是:
if (errors.length > 0){
errors.forEach(function(error){
// var errorView = new OperationErrorView({attributes: {"error": error} }); Doesn't work
var errorView = new OperationErrorView();
errorView.set({attributes: {"error": error}})
errorView.render()
$("#formAdd_errors").append(errorView.$el.html());
});
}
这样做的正确方法是什么?现在它不起作用:当我尝试未注释掉的方法时,它会给我错误TypeError: errorView.set is not a function
,如果我以第一种方式尝试它,它就不会调用render()函数。
更新
var OperationErrorView = Backbone.View.extend({
attributes: {},
initialize: function(attributes){
this.attributes = attributes;
},
render: function(){
var html = "<h3>" + this.attributes.get("error") +"</h3>";
console.log("html");
$(this.el).html(html);
}
})
if (errors.length > 0){
errors.forEach(function(error){
console.log(error);
var errorView = new OperationErrorView({"error": error});
errorView.render()
$("#formAdd_errors").append(errorView.$el.html());
});
}
我尝试在initialize函数中包含this.render()。不行。甚至不调用渲染功能。为什么呢?
答案 0 :(得分:2)
一些事情:
set
不是Backbone View的功能。 Check the API new OperationErrorView(...)
不会自动唤起render
函数。您必须手动执行此操作。attributes
属性没有get
方法。再次,Check the API 那么,你应该怎么做?
研究initialize a View with properties的不同方法。然后弄清楚如何在View控制的HTML上获取这些属性。
这里有点让你入门
var OperationErrorView = Backbone.View.extend({
tagName: 'h3',
initialize: function(attributes) {
this.attributes = attributes;
this.render();
},
render: function(){
// attach attributes to this.$el, or this.el, here
// insert the element into the DOM
$('#formAdd_errors').append(this.$el);
}
});
// later in your code
if ( errors.length > 0 ) {
errors.forEach(function(error) {
new OperationErrorView({ error: error });
});
}
答案 1 :(得分:1)
感谢chazsolo的回答,所有信息都在那里。因此,我会编写一些代码,以防万一有人发现它有用:
var OperationErrorView = Backbone.View.extend({
initialize: function(attributes){
this.attributes = attributes;
},
render: function(){
var html = "<h3>" + this.attributes.error +"</h3>";
$(this.el).html(html);
}
});
if (errors.length > 0){
errors.forEach(function(error){
var errorView = new OperationErrorView({'error':error});
errorView.render()
$("#formAdd_errors").append(errorView.$el.html());
});
}