Backbone.js 将自定义属性添加到集合的每个项
我试图将自定义属性添加到集合的每个项中,但它没有显示在模板中 我有很多报价单都有Backbone.js 将自定义属性添加到集合的每个项,backbone.js,handlebars.js,Backbone.js,Handlebars.js,我试图将自定义属性添加到集合的每个项中,但它没有显示在模板中 我有很多报价单都有客户id。现在我想通过client\u id获取客户机,并将其添加到集合条目中。一般来说,它在使用console.log检查填充的对象时起作用,但它不会显示在模板中 我就是这样尝试的: sprocket.QuotationsView = Backbone.View.extend({ id: 'content-inner', initialize: function(options) {
客户id
。现在我想通过client\u id
获取客户机,并将其添加到集合条目中。一般来说,它在使用console.log
检查填充的对象时起作用,但它不会显示在模板中
我就是这样尝试的:
sprocket.QuotationsView = Backbone.View.extend({
id: 'content-inner',
initialize: function(options) {
// instantiate Collection
this.collection = new Quotations();
// compile Handlebars template
this.tpl = Handlebars.compile(this.template);
},
render: function() {
var self = this;
var obj = this.el;
// get quotations and set data to handlebars template
$.when(this.collection.fetch()).then(function(quotations) {
$.each(quotations, function(i, quotation) {
var loadContact = new Contact({id: quotation.contact_id}).fetch();
$.when(loadContact).then(function(contact) {
quotations[i]['contact'] = contact;
});
});
$(obj).html(self.tpl(quotations));
// if response is empty (no quotations in database), set empty template
}, function() {
$(obj).html(self.tpl);
});
return this;
}
});
我的模板如下所示:
<div>
{{#if .}}
{{#each .}}
{{number}} <!-- this works -->
{{contact}} <!-- this doesn't work -->
{{contact.name}} <!-- this doesn't work too -->
{{/each}}
{{/if}}
</div>
{{#如果}
{{{#每个。}
{{number}}
{{contact}}
{{contact.name}
{{/每个}}
{{/if}
这是因为实际上更改quote.attribute.contact
内数据的回调(即您的quotes[i]['contact']=contact;
行)是在获取联系人之后执行的,而该联系人恰好是在呈现模板之后
$.each(quotations, function(i, quotation) {
var loadContact = new Contact({id: quotation.contact_id}).fetch();
// This is the callback that is being executed after the backend responds
$.when(loadContact).then(function(contact) {
quotations[i]['contact'] = contact;
});
});
// This is the template rendering which is before the server has time to respond
$(obj).html(self.tpl(quotations));
取回所有联系人
并将其添加到报价单
后,改为渲染模板
解决此问题的快速方法:
在包含回调的函数中创建一个循环,用于加载所有联系人
在加载所有联系人后调用回调
回调应该呈现模板
这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用Backbone.marionete
将视图
和控制器
拆分为两个不同的实体,通过事件松散耦合。只有控制器
知道视图
,只有视图
知道DOM
,这是因为回调实际上更改了quote.attribute.contact
中的数据(即您的quotes[i]['contact']=contact;
行)在获取联系人
之后执行,该联系人恰好在呈现模板之后
$.each(quotations, function(i, quotation) {
var loadContact = new Contact({id: quotation.contact_id}).fetch();
// This is the callback that is being executed after the backend responds
$.when(loadContact).then(function(contact) {
quotations[i]['contact'] = contact;
});
});
// This is the template rendering which is before the server has time to respond
$(obj).html(self.tpl(quotations));
取回所有联系人
并将其添加到报价单
后,改为渲染模板
解决此问题的快速方法:
在包含回调的函数中创建一个循环,用于加载所有联系人
在加载所有联系人后调用回调
回调应该呈现模板
这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用Backbone.marionete
将视图
和控制器
拆分为两个不同的实体,通过事件松散耦合。只有控制器
知道视图
,只有视图
知道DOM
,这是因为回调实际上更改了quote.attribute.contact
中的数据(即您的quotes[i]['contact']=contact;
行)在获取联系人
之后执行,该联系人恰好在呈现模板之后
$.each(quotations, function(i, quotation) {
var loadContact = new Contact({id: quotation.contact_id}).fetch();
// This is the callback that is being executed after the backend responds
$.when(loadContact).then(function(contact) {
quotations[i]['contact'] = contact;
});
});
// This is the template rendering which is before the server has time to respond
$(obj).html(self.tpl(quotations));
取回所有联系人
并将其添加到报价单
后,改为渲染模板
解决此问题的快速方法:
在包含回调的函数中创建一个循环,用于加载所有联系人
在加载所有联系人后调用回调
回调应该呈现模板
这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用Backbone.marionete
将视图
和控制器
拆分为两个不同的实体,通过事件松散耦合。只有控制器
知道视图
,只有视图
知道DOM
,这是因为回调实际上更改了quote.attribute.contact
中的数据(即您的quotes[i]['contact']=contact;
行)在获取联系人
之后执行,该联系人恰好在呈现模板之后
$.each(quotations, function(i, quotation) {
var loadContact = new Contact({id: quotation.contact_id}).fetch();
// This is the callback that is being executed after the backend responds
$.when(loadContact).then(function(contact) {
quotations[i]['contact'] = contact;
});
});
// This is the template rendering which is before the server has time to respond
$(obj).html(self.tpl(quotations));
取回所有联系人
并将其添加到报价单
后,改为渲染模板
解决此问题的快速方法:
在包含回调的函数中创建一个循环,用于加载所有联系人
在加载所有联系人后调用回调
回调应该呈现模板
这是我个人的观点,绝不是对这个问题的回答:我不喜欢后端的数据逻辑和同一类中的视图呈现和逻辑。我使用Backbone.marionete
将视图
和控制器
拆分为两个不同的实体,通过事件松散耦合。只有控制器
知道视图
,只有视图
知道DOM
您在quotes[i]['contact']=contact上放置了断点代码>?contact
是您所期望的吗?我猜不是……正如我所说:一般来说,它在使用console.log检查填充的对象时有效。
…您是否在引用[I]['contact']=contact代码>?contact
是您所期望的吗?我猜不是……正如我所说:一般来说,它在使用console.log检查填充的对象时有效。
…您是否在引用[I]['contact']=contact代码>?contact
是您所期望的吗?我猜不是……正如我所说:一般来说,它在使用console.log检查填充的对象时起作用。。。