骨干一对多关系芯片

时间:2017-10-19 07:51:37

标签: javascript html backbone.js underscore.js lodash

我是Backbone.js的初学者,我很难在两个Backbone模型之间建立一对多关系芯片,并将这些数据显示在一个html表格行中。 我正在使用可以拥有多个订单的机器。数据看起来像:

  • 机器10具有订单1,2,5,9。
  • 机器14有订单3,4,6。

机器和订单按顺序与FK machine_id结合使用。 我试图使用第一个元素TH作为机器来制作TR元素,而在第二个/第三个TH上我想要显示属于机器的命令。

所以我问的问题是:

  • 如何在我的骨干模型中建立这种一对多的关系。
  • 如何在我的下划线模板中创建此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>

2 个答案:

答案 0 :(得分:1)

假设您有一组名为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]
}]

现在可以将它传递给模板函数,该函数迭代每个条目并渲染它。

答案 1 :(得分:0)

我看到您已经通过在app中引用machine_id建立了一对多的关系。订单模型 至于你的第二个问题,

  

如何在我的下划线模板中显示此TR元素   属于机器的订单。

我在模板中看不到<tr></tr>

在骨干网中,模板只是一个愚蠢的html组件,不鼓励使用逻辑。您的所有逻辑都将存在于您的视图中,理想情况下,您可能拥有订单集合并通过machine_id字段查询订单集合。