2012-12-05 53 views
0

根據docs,我應該能夠在模型上定義函數,然後在該模型的實例上調用該函數。Extjs4 - 在模型上定義方法

至少在我從代理加載模型的情況下,它不起作用。

我的模型:

Ext.define('MyApp.model.Detail', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     'someField', 
     'anotherField', 
    ], 

    someFunction: function() { 
      //do something 
    }, 

    proxy: { 
     type: 'ajax', 
     url: 'http://example.com/details', 
     reader: { 
      type: 'json', 
      root: 'data', 
      totalProperty: 'total', 
      successProperty: 'success', 
     } 
    }, 
}); 

商店:

Ext.define('MyApp.store.DetailStore', { 
    extend: 'Ext.data.Store', 
    storeId: 'detailStore', 
    model: 'MyApp.model.Detail', 
}); 

控制器:

Ext.define('MyApp.controller.appController', { 
    extend: 'Ext.app.Controller', 
    init: function() { 
     this.getDetailStoreStore().addListener('load', this.newDetails, this); 
    }, 

    stores: ['DetailStore'], 

    models: ['Detail'], 

    views : ['DetailView], //exists, not copied into question 

    newDetails: function(store, records) { 
     var details = records[0].data; 
     details.someFunction(); // Uncaught TypeError: Object #<Object> has no method 'someFunction' 
    } 
}); 

調用data.someFunction當newDetails功能,發生錯誤()。

我有錯誤的期望嗎?

回答

1

功能上存在的模式,所以你會打電話:

records[0].someFunction(); 
+0

非常感謝您的快速回復,這是完全正確的。 :)另一個細節是,在某些功能中,您需要調用this.data來獲取實際填充的數據字段。再次感謝! – romacafe

+0

你應該真的使用this.get()而不是訪問原始數據屬性。 –