extjs 4 XTemplate 类关联

标签 extjs model extjs4 model-associations

我正在测试 extjs 4 并且我偶然发现了一些东西,我似乎无法弄清楚。

我有简单的对象关联:快照 - hasMany -> 模型

现在,我尝试使用 XTemplate 在 View 组件中显示此关联,因此我的 XTemplate 如下所示:

Ext.create('Ext.XTemplate',
'<tpl for=".">',
'<div class="snapshot" id="{id}">',
'<h1>{snapshot}</h1>',
'<p><span class="label">Created: </span>{dateString}</p>',
'<p><span class="label">Models</span></p>',
'<tpl for="models">',
'<p>{name}  - {description}</p>',
'</tpl>',
'</div>',
'</tpl>',
'<div class="x-clear bottompad"></div>'
);

我的 JSON 响应如下所示(仅显示“快照”节点):
    {
        "id": 1,
        "snapshot": "Snapshot 1",
        "created": 1305806847000,
        "models": [
            {
                "id": 1,
                "name": "ABC",
                "description": "A B C"
            }, {

                "id": 111,
                "name": "ABCDD",
                "description": "A B C XCXC"
            }
        ]
    }

由于 extjs 4 引入了模型的概念,我为快照和模型创建了模型,并根据 API 文档创建了关联。

快照模型:
Ext.define('Snapshot', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        'snapshot',
        {name: 'created',type: 'date', dateFormat: 'time' }

    ],
    associations:[
      {type: 'hasMany', model: 'Model', name: 'models'}  
    ],
    idProperty: 'id'
});

型号型号;P
Ext.define('Model', {
    extend: 'Ext.data.Model',
    belongsTo: 'Snapshot',
    fields: [
        { name: 'id',  type: 'int' },
        { name: 'snapshot_id', type: 'int' },            
        'name',
        'description'
    ],
    idProperty: 'id'
});

这就是我的问题所在 - 当我使用此设置时,在执行 XTemplate 时不会显示我的任何模型,但是如果我从快照模型中删除关联并添加另一个名为“模型”的字段,则它可以正常工作。

在使用关联时正确显示模型列表的最佳做法是什么?
我是否必须使用嵌套模板和自定义函数来执行此操作?

最佳答案

好问题 (+1)

似乎在 XTemplate 中直接使用关联是不可能的(今天),因为 XTemplate 需要对象数组。 (当你有关联时,这不再是真的)

你有三个选择——

  • 摆脱像你这样的协会
    提及。 (“听起来”不好
    但会工作)
  • 如果您有使用模板的数据 View ,请覆盖 Ext.view.AbstractView.prepareData并从您的模型创建对象数组
  • 在调用 apply 之前,遍历 snapshotStore.getRange() 并(重新)生成具有“models”属性的对象并将此数组传递给 .apply
  • 关于extjs 4 XTemplate 类关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467925/

    相关文章:

    javascript - 从我的 map 更改样式

    javascript - 如何防止某些表单的字段被提交

    javascript - 从 ExtJS TreePanel 获取 JSON 数据

    javascript - beforesize 和 resizedrag 没有被调用 extjs

    ruby-on-rails - Ruby on Rails 中多态模型的作用域

    javascript - 将 JSON 响应映射到 Vue.js 中的模型类

    python - backbone.js 在 python 中模拟模型

    Extjs4 组合和商店 : Remove filter when queryMode=local?

    extjs - 如何在 extjs4 MVC 中将变量从 Controller 传递到 View ,反之亦然?

    javascript - Extjs - 面板工具