durandal:一个视图模型的多个视图

时间:2013-10-10 01:50:58

标签: mvvm breeze durandal composition durandal-2.0

我和durandal 2和breezejs一起工作。

我的数据库中有一些表,可以将它们称为table1和table2。

在项目中,我为table1创建了一个CRUD:viewmodels/table1crud.js + views/table1crud.html viewmodel和视图,它将使用breeze连接到数据库,从table1获取数据,列出数据,并提供更新/删除/添加操作。

对于table2我可以这样做,创建另一个crud(view / viewmodel),但它可能不优雅,特别是如果我有超过2个表。

所以我的想法是使用构造函数创建一个entitycrud viewmodel:

define(function(require){

   var vm= function(entityType){

    this.entityType= entityType;
    this.activate = function(){...};
    this.attached = function(){...};
    etc ...

    this.createEntity = function(){...};
    etc ...
   };

  return vm;
 });

加上多个观看次数views/table1.htmlviews/table2.html

所以这是我的问题:有没有办法在构造函数中使用entityType与entitycrudtable1组合table2

类似的东西:

<div data-bind="compose : {model : 'entitycrud("table1")', view : 'views/table1'}"></div>

<div data-bind="compose : {model : 'entitycrud("table2")', view : 'views/table2'}"></div>

这个html代码当然不会工作,我怎么能做类似的事情?

谢谢。

1 个答案:

答案 0 :(得分:4)

您可以在另一个视图模型中使用正确的值(例如cruds model),

define(function(require){

   var vm= function(entityType){
         this.crudTable1=new entitycrud("table1");
         this.crudTable2=new entitycrud("table2");
   };

    return vm;
 });

然后在cruds.html视图中执行这样的compose绑定,

  <div data-bind="compose : {model : crudTable1, view : 'views/table1'}"></div>

<div data-bind="compose : {model : crudTable2, view : 'views/table2'}"></div>