在Sencha Touch中,如何在调用MyApp.MyModel.load()后通知与模型关联的所有商店

时间:2014-09-12 04:51:13

标签: extjs sencha-touch-2.3

如何在调用MyApp.MyModel.load()后通知与模型关联的所有商店?或者,有没有办法通过Id从商店的上下文加载1条记录?

我的最终目标是从服务器获取一条记录,并刷新绑定到其中包含记录的商店的列表。

2 个答案:

答案 0 :(得分:1)

不要做Myapp.model.load。改为使用store.load。

因为你真正想做的是:

function refreshSingleItem(store,id) {
    store.remove(store.getById(id));
    store.getProxy().setExtraParam("id",id);
    store.load({addRecords:true;});
}

答案 1 :(得分:0)

加载商店时,所有记录都会加载到该商店。您不需要任何其他内容,因为如果您不将其存储在客户端,则不必通过网络加载所有内容。

无法进行一次通话并更新所有已在url中进行该通话的商店。它只会更新一个商店,您需要自己编码的所有其他内容。

也就是说,您可以随时使用相同型号制作第二个商店,并将第一个商店中的单个记录加载到第二个商店:

store1.on('load',function() {
    store2.add(store1.getById(recordId));
});

Voilà,现在你有一个只有一个记录的商店,你可以根据需要加载任何其他记录。但是,与其他方式相比,这需要的频率较低。所以,假设你有一个记录:

data:[{
    meetingId:123,
    time:'2014-09-16T17:40',
    location:'1 Washington Drive, room #1203'
    participants:[{
        name:'John Doe',
        phone:'46318123'
    },{
        name:'Jane Doe',
        phone:'477119524'
    },{
        name:'George Washington',
        phone:null
    }]
}]

然后,您可以将参与者定义为model1中没有类型的字段,使用姓名和电话制作模型2,然后执行以下操作:

store1.on('load',function() {
    form.loadRecord(store1.getAt(0));
    store2.add(store1.getAt(0).get("participants"));
});