質問

Im working with durandal 2 and breezejs.

I have some tables in my DB lets call them table1 and table2.

In the project i created a CRUD for table1 : viewmodels/table1crud.js + views/table1crud.html viewmodel and view that will connect to the DB using breeze, get data from table1, list the data, and offer a update/delete/add operations.

For table2 i can do the same, create another crud (view/viewmodel), BUT it can be not elegant, specially if i have more than 2 tables.

So my idea is to create ONE entitycrud viewmodel, with a constructor:

define(function(require){

   var vm= function(entityType){

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

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

  return vm;
 });

Plus multiple views views/table1.html and views/table2.html.

So here is my question : is there any way to compose entitycrud with table1 or table2 using the entityType in the constructor ?

Something like :

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

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

This html code will not work of course, how can i do something similar ??

Thank you.

役に立ちましたか?

解決

You can have a properties in another view model with the correct values like this (let's say cruds model) ,

define(function(require){

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

    return vm;
 });

and then do the compose binding like this inside the cruds.html view,

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

<div data-bind="compose : {model : crudTable2, view : 'views/table2'}"></div>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top