2013-03-20 73 views
1

我已經張貼同樣的問題在煎茶論壇:http://www.sencha.com/forum/showthread.php?259313-Dealing-with-nulls-in-nested-data&p=949429#post949429在ExtJS的空協會處理4款

我無法理解協會應該如何工作(在ExtJS的4.1.1a)。 考慮以下模型:

Ext.define('FM.model.Project', { 
    extend: 'Ext.data.Model', 
    requires: ['FM.model.Company'], 

    fields: [ 
     'id', 
     'customer_id', 
     'parent_id', 
     'name', 
     'code', 
     'supervisor_id', 
     'start_date', 
     'end_date', 
     'budgeted_hours', 
     'budgeted_sales', 
     'budgeted_working_cost', 
     'budgeted_material_cost', 
     'info' 
    ], 

    associations: [ 
     {type: 'belongsTo', model: 'FM.model.Company', associatedName: 'Customer'}, 
     {type: 'belongsTo', model: 'FM.model.Project', associatedName: 'Parent'}, 
    ] 
}); 

有時「父」或「客戶」中的JSON數據爲空,在這種情況下,聯想的getter應該返回null爲好。但是,相反,我得到一個異常:

con是不是構造

從ModelManager.js在創建()。發生這種情況是因爲BelongsTo關聯試圖用associatedName(它是「Parent」或「Customer」)創建一個新實例。這對我來說毫無意義。

我該如何處理這些缺失的關聯?構建一個虛擬的新實例並不是一個好的解決方案,因爲我需要能夠判斷相關數據是否存在。

回答

0

你是對的,它應該創建一個getter函數返回null

這裏有一個解決方法:

設置belongsTo關係instanceName,並檢查它是否調用getter之前就存在:

... 
{type: 'belongsTo', model: 'FM.model.Company', associatedName: 'Customer', instanceName:'customer'} 
... 

if(myProject.customer){ 
    console.log(myProject.getCustomer().get('name')); 
} 

http://jsfiddle.net/4TSDu/55/