如何使用ext.net为ext.js定义嵌套商店

时间:2013-02-06 20:54:46

标签: extjs ext.net

平台 - MVC项目中的Ext.net 2.1。数据从DirectMethod返回json,我在客户端绑定。

我将返回包含多个表的数据集的结果,并在表之间定义关系。我想将结果数据绑定到要在数据视图中使用的商店。我填写的第一个数据视图只使用最高级别的数据。但是,当用户在数据视图中选择记录时,我想绑定到不同数据视图中的另一个模板,以提供所有级别的信息。

Tables

Account
--- Addresses

(我现在暂时跳过另一张桌子)

以下是我的模型和商店的定义:

@(Html.X().Model()
      .Name("SearchResults.Models.Address")
      .IDProperty("nafnmfuid")
      .Associations(assoc => assoc.Add(new BelongsToAssociation() {Model = "SearchResults.Models.Account"}))
      .Fields(
          new ModelField("nafnmfuid", ModelFieldType.Int),
          new ModelField("naftype"),
          new ModelField("nafadd1"),
          new ModelField("nafcity"),
          new ModelField("nafstate"),
          new ModelField("nafzip")
      ))

@(Html.X().Model()
    .Name("SearchResults.Models.Account")
    .IDProperty("nmfuid")
    .Associations(assoc => assoc.Add(new HasManyAssociation() {Name = "Addresses", Model = "SearchResults.Models.Address", AssociationKey = "Addresses", PrimaryKey = "nmfuid", ForeignKey = "nafnmfuid"}))
    .Fields(
        new ModelField("nmfuid", ModelFieldType.Int),
        new ModelField("AmfLastNamePrimary"),
        new ModelField("AmfFirstNamePrimary"),
        new ModelField("nmfid"),
        new ModelField("naftype"),
        new ModelField("nafadd1"),
        new ModelField("nafcity"),
        new ModelField("nafstate"),
        new ModelField("nafzip")
    )
)    

@(Html.X().Store()
            .ID("StoreSearchResults")
            .ModelName("SearchResults.Models.Account")
            .Reader(readers => readers.Add(Html.X().JsonReader()))
      )

我尝试将数据作为嵌套的json以及json中的三个对象返回。

当我绑定数据(在客户端上)时,我获得了名为Addresses的最高级别(Account)中的新字段。但是,该字段是一个空数组。

当我查看帐户记录的RAW属性时,我会看到所有嵌套数据。

这是由Ext.net

生成的ext.js代码
   window.App.StoreSearchResults2 = Ext.create("Ext.data.Store", {
    model:Ext.define("SearchResults.Models.Address",  {
        extend: "Ext.data.Model"
        , fields:[ {
            name:"nafnmfuid"
            ,type:"int"
        }
        , {
            name:"naftype"
        }
        , {
            name:"nafadd1"
        }
        , {
            name:"nafcity"
        }
        , {
            name:"nafstate"
        }
        , {
            name:"nafzip"
        }
        ]
        ,idProperty:"nafnmfuid"
        ,associations:[ {
            type:"belongsTo"
            ,model:"SearchResults.Models.Account"
        }
        ]
    })
    ,storeId:"StoreSearchResults2"
    ,autoLoad:true
    ,proxy: {
        type:'memory'
        , reader: {
            type:"json"
        }
    }
});
window.App.StoreSearchResults = Ext.create("Ext.data.Store", {
    model:Ext.define("SearchResults.Models.Account",  {
        extend: "Ext.data.Model"
        , fields:[ {
            name:"nmfuid"
            ,type:"int"
        }
        , {
            name:"AmfLastNamePrimary"
        }
        , {
            name:"AmfFirstNamePrimary"
        }
        , {
            name:"nmfid"
        }
        , {
            name:"naftype"
        }
        , {
            name:"nafadd1"
        }
        , {
            name:"nafcity"
        }
        , {
            name:"nafstate"
        }
        , {
            name:"nafzip"
        }
        ]
        ,idProperty:"nmfuid"
        ,associations:[ {
            type:"hasMany"
            ,associationKey:"addresses"
            ,primaryKey:"nmfuid"
            ,model:"SearchResults.Models.Address"
            ,foreignKey:"nafnmfuid"
            ,name:"Addresses"
        }
        ]
    })
    ,storeId:"StoreSearchResults"
    ,autoLoad:true
    ,proxy: {
        type:'memory'
        , reader: {
            type:"json"
        }
    }
});

1 个答案:

答案 0 :(得分:0)

问题是我在客户端上使用loadData方法来绑定数据。切换到loadRawData就可以了。