Javascript 使用新的主干模型向我的下划线模板添加更多的循环?
更新: 我已经让我的代码正常工作了,但我有两个问题,还有一个问题我不知道如何解决。我将在下面发布我的当前代码。一个客户端附加到TimesheetData模板的右侧部分。但它将选项标记包装在另一个选项的ClientData模板中 所以我得到:Javascript 使用新的主干模型向我的下划线模板添加更多的循环?,javascript,backbone.js,underscore.js,underscore.js-templating,Javascript,Backbone.js,Underscore.js,Underscore.js Templating,更新: 我已经让我的代码正常工作了,但我有两个问题,还有一个问题我不知道如何解决。我将在下面发布我的当前代码。一个客户端附加到TimesheetData模板的右侧部分。但它将选项标记包装在另一个选项的ClientData模板中 所以我得到: <select> <option> <option value="XX"> XXX </option> </option> </select> 时间表数据代码: var
<select>
<option> <option value="XX"> XXX </option> </option>
</select>
时间表数据代码:
var ClientModel = Backbone.Model.extend({
defaults: {
Client: "",
}
}); //End of ClientModel
var ClientCollection = Backbone.Collection.extend({
model: ClientModel,
url: '/dashboard/json/clients'
}); //End of ClientCollection
var ClientView = Backbone.View.extend({
tagName: 'option',
template: _.template($('#ClientData').html()),
render: function() {
this.$el.append(this.template(this.model.toJSON()));
return this.$el;
}
});
var TimeSheetModel = Backbone.Model.extend({
defaults: {
Timesheetrow: "",
}
}); //End of TimeSheetModel
var TimeSheetCollection = Backbone.Collection.extend({
model: TimeSheetModel,
url: '/dashboard/json/row/' + TimesheetID()
}); //End of TimeSheetCollection
var TimeSheetRowView = Backbone.View.extend({
className: 'TimesheetRowLine',
template: _.template($('#TimesheetData').html()),
render: function() {
this.$el.append(this.template(this.model.toJSON()));
return this.$el;
}
}); //End of TimeSheetRowView
时间表和客户代码部分:
var TimeSheetCollectionView = Backbone.View.extend({
el:'#MasterContainer',
template: _.template($('#TimesheetForm').html()),
events: {
"click .actionSubmit": "handleSubmit"
},
initialize: function() {
//Get Client Data & Add To Template
this.clientcollection = new ClientCollection();
this.listenTo(this.clientcollection, "add", this.AddClient);
this.clientcollection.fetch();
//Get Main Timesheet Data & Add To Template
this.collection = new TimeSheetCollection();
this.listenTo(this.collection, "add", this.AddTimesheetRow);
this.collection.fetch();
this.$el.append(this.template());
this.submitButton = this.$(".actionSubmit");
},
AddTimesheetRow: function(model) {
var view = new TimeSheetRowView({model: model});
view.render().insertBefore(this.submitButton);
},
AddClient: function(model) {
var clients = new ClientView({model: model});
$("#TimesheetDataList .TimesheetRowLine #clienttemp").append( clients.render() );
},
handleSubmit: function(){
//in real life, you would validate and save some model
alert("form submit");
return false;
}
}); //End of TimeSheetCollectionView
var collectionView = new TimeSheetCollectionView();
这是我的下划线模板代码:
<script type="text/template" id="TimesheetForm">
<form action="#" method="post" id="TimesheetDataList" style="width: auto; padding-left: 50px;">
<input type="submit" class="actionSubmit" value="Send"/>
</form>
</script>
<script type="text/template" id="TimesheetData">
<%= console.log( Timesheetrow.client_id ) %>
<input type="hidden" name="data[Timesheetrow][<%= Timesheetrow.id %>][id]" value="<%= Timesheetrow.id %>">
<input type="type" name="data[Timesheetrow][<%= Timesheetrow.id %>][jobtitle]" value="<%= Timesheetrow.twistjob %>">
<select name="data[Timesheetrow][<%= Timesheetrow.id %>][client_id]" id="clienttemp"></select>
</script>
<script type="text/template" id="ClientData">
<option value="<%= Client.id %>"><%= Client.clientname %></option>
</script>
所以我试着用同样的方法。我知道我必须寻求更多的培训来扩展我的知识
有了这段代码,我就有了一个客户端列表,我需要将其加载到select/option下拉表单元素中。但它似乎只循环了17次,这是我时间表中的行数。我正在控制台“ClientData”模板中记录“Client”,这是显示我的客户端数据,但仅显示记录在时间表行中的客户端数据,而不是模型/集合指向的JSON数据中的所有客户端?我还收到了客户的参考错误?即使它在我的模型中是默认的
我对主干线有点了解,但不太了解
欢迎大家帮忙
谢谢
::编辑::
我想我会发布我的下划线模板
CODE REMOVED - SEE UPDATE
所以我要做的是在ClientData模板中为所有客户机循环使用“option”标记,然后将其添加到TimesheetData模板上的select元素中。然后,通过将此模板添加到时间表表单模板(它已经这样做了)来完成
这可能需要一种不同的方法,这可能是我的错,因为我忘了在客户列表中的另一个问题上解释
谢谢,您的ClientView和ClientCollectionView都将模板设置为ClientData,这肯定会导致集合出错。另外,在AddClient上,您正在clientView上调用render,但您从未将其el附加到DOMOk,现在,在其他方面,我有一点了解这一点-再次非常感谢您的帮助:您的best@daniel-j-g,我已经将ClientCollectionView模板更改为TimesheetForm.,这清除了我的引用错误。但是我的console.log在我的ClientView模板中,它仍然只记录了17次控制台日志?虽然所有的温度都是100度。我的列表中的客户端难道你的api不返回包含17项的json吗?所以,每一个模型都被添加到您的收藏中。有时,我应该睁开眼睛我需要将路径更改为“/clients”,而不是“/row”。它现在会记录所有客户端,但模板不会在html中显示它们?我肯定我做错了什么,但是谢谢你的帮助
CODE REMOVED - SEE UPDATE