Backbone 一对多关系
Backbone one to many relationschip
我是 Backbone.js 的初学者,我很难在两个 Backbone 模型之间建立一对多关系芯片,并将此数据显示到 html 表格行中。
我正在使用一台可以有多个订单的机器。数据将如下所示:
- 机器 10 有订单 1,2,5,9。
- 机器 14 有订单 3、4、6。
机器和订单加上一个FK machine_id顺序。
我试图使第一个元素 TH 的 TR 元素成为机器,并且在 second/third TH 上我想显示属于机器的订单。
所以我问的问题是:
- 如何在我的 backbone 模型中建立这种一对多关系。
- 如何在我的下划线模板中创建这个 TR 元素以显示属于某台机器的订单。
以下是订单和机器的模型:
app.Machine = Backbone.Model.extend({
defaults : {
machine_id : "",
status : "",
description : "",
},
});
app.Order = Backbone.Model.extend({
defaults: {
order_id: "",
description: "",
amount: "",,
begin_date:"",
end_date:"",
machine_id: ""
},
});
app.MachineList = Backbone.Collection.extend({
model: app.Machine
});
观看次数:
app.MachineView = Backbone.View.extend({
className: 'MachineRow',
template: _.template($('#Machine_Template').html()),
render: function(){
this.$el.html(this.template(this.model.attributes));
return this;
}
});
app.MachineListView = Backbone.View.extend({
el: '#Machine',
initialize: function(initialMachine){
this.collection = new app.MachineList(initialMachine);
this.render();
},
render: function(){
this.collection.each(function(item){
this.renderMachine(item);
filterOrder(item.get('machine_id'));
}, this);
},
renderMachine: function(item){
var machineView = new app.MachineView({
model: item
});
$(machineView.render().el).appendTo(this.$el)
}
});
HTML 代码:看起来像这样??
<script id="machine_template" type="text/template">
<th>
<%= machine_id %> //etc
</th>
<th>
<%= order_id %> //etc
</th>
<th>
<%= order_id %> //etc
</th>
</script>
我看到您已经通过在 app.Order 模型中引用 machine_id
建立了一对多关系
至于你的第二个问题,
how do i make this TR element within my underscore template to show
orders that belong to a machine.
我在你的模板中没有看到 <tr></tr>
。
在 backbone 中,模板只是一个愚蠢的 html 组件,不鼓励使用逻辑。您的所有逻辑都将驻留在您的视图中,理想情况下,您可能有一个订单集合并通过 machine_id
字段查询您的订单集合。
假设您有一个名为 orders
的订单集合,您可以执行如下操作:
let renderData = machineList.map(machine -> {
return {
machine: machine,
orders: orders.where({machine_id: machine.get('id')}
}
});
这应该会给你一个类似于
的结构
[{
machine: machineModel1,
orders: [orderModel1, orderModal2]
},{
machine: machineModel2,
orders: [orderModel3, orderModal4]
}]
您现在可以将其传递给您的模板函数,该函数遍历每个条目并呈现它。
我是 Backbone.js 的初学者,我很难在两个 Backbone 模型之间建立一对多关系芯片,并将此数据显示到 html 表格行中。 我正在使用一台可以有多个订单的机器。数据将如下所示:
- 机器 10 有订单 1,2,5,9。
- 机器 14 有订单 3、4、6。
机器和订单加上一个FK machine_id顺序。 我试图使第一个元素 TH 的 TR 元素成为机器,并且在 second/third TH 上我想显示属于机器的订单。
所以我问的问题是:
- 如何在我的 backbone 模型中建立这种一对多关系。
- 如何在我的下划线模板中创建这个 TR 元素以显示属于某台机器的订单。
以下是订单和机器的模型:
app.Machine = Backbone.Model.extend({
defaults : {
machine_id : "",
status : "",
description : "",
},
});
app.Order = Backbone.Model.extend({
defaults: {
order_id: "",
description: "",
amount: "",,
begin_date:"",
end_date:"",
machine_id: ""
},
});
app.MachineList = Backbone.Collection.extend({
model: app.Machine
});
观看次数:
app.MachineView = Backbone.View.extend({
className: 'MachineRow',
template: _.template($('#Machine_Template').html()),
render: function(){
this.$el.html(this.template(this.model.attributes));
return this;
}
});
app.MachineListView = Backbone.View.extend({
el: '#Machine',
initialize: function(initialMachine){
this.collection = new app.MachineList(initialMachine);
this.render();
},
render: function(){
this.collection.each(function(item){
this.renderMachine(item);
filterOrder(item.get('machine_id'));
}, this);
},
renderMachine: function(item){
var machineView = new app.MachineView({
model: item
});
$(machineView.render().el).appendTo(this.$el)
}
});
HTML 代码:看起来像这样??
<script id="machine_template" type="text/template">
<th>
<%= machine_id %> //etc
</th>
<th>
<%= order_id %> //etc
</th>
<th>
<%= order_id %> //etc
</th>
</script>
我看到您已经通过在 app.Order 模型中引用 machine_id
建立了一对多关系
至于你的第二个问题,
how do i make this TR element within my underscore template to show orders that belong to a machine.
我在你的模板中没有看到 <tr></tr>
。
在 backbone 中,模板只是一个愚蠢的 html 组件,不鼓励使用逻辑。您的所有逻辑都将驻留在您的视图中,理想情况下,您可能有一个订单集合并通过 machine_id
字段查询您的订单集合。
假设您有一个名为 orders
的订单集合,您可以执行如下操作:
let renderData = machineList.map(machine -> {
return {
machine: machine,
orders: orders.where({machine_id: machine.get('id')}
}
});
这应该会给你一个类似于
的结构[{
machine: machineModel1,
orders: [orderModel1, orderModal2]
},{
machine: machineModel2,
orders: [orderModel3, orderModal4]
}]
您现在可以将其传递给您的模板函数,该函数遍历每个条目并呈现它。