2016-11-21 34 views
1

我有一個模型公司和一個模型地址。 company.address屬於地址。因此,當我獲取公司記錄model(params) {return this.store.findRecord('company', params.companyID);}時,我可以使用model.address.street訪問地址屬性。但是,當我的後端重新建立地址:null時,因爲公司dosnt與地址有關係,我希望用戶可以通過輸入字段設置街道,所以我得到錯誤Assertion Failed: Cannot delegate set('street', a) to the 'content' property of object proxy <(subclass of Ember.ObjectProxy):ember1458>: its 'content' is undefined."Ember:更改可爲空關係的屬性

以下是具有null關係的json :

{"data": { 
    "attributes": {"name": "test-company"}, "id": "5", 
    "relationships": { 
     "address": { 
      "data": null 
      } 
     }, 
     "type": "companies" 
    } 
} 

那麼我該如何避免這個錯誤呢?在獲取公司記錄後,我可以證明model.address,如果它有一個id,但是在每條路線上做這件事都不是很聰明。

回答

0

那麼最初你的路由模型鉤子應該確保組織有一個有效的餘燼數據記錄的地址。如果不是,則創建一個空的。現在

model: function(params) { 
     const store = this.get('store'); 

     return Ember.RSVP.hash({ 
      org: store.findRecord('orgnanization', params.id).then(org => { 
       org.get('address').then(address => { 
         if(Ember.isNone(address)) { 
         org.set('address', store.createRecrord('organization.address', {}); 
         } 
       }) 
      }), 
     }); 
}, 

您的輸入可以直接結合organization.address.street因爲它在任何時候都現在涉及到燼數據記錄。

{{input type="text" value=model.org.address.street}} 

而編輯時你首先需要保存地址記錄,所以它會有一個id然後保存原始組織。

editOrganization: function() { 
    const org = this.get('model.org') 
    const saveAddressPromise = org.get('address').then(address => { 
     return Ember.isPresent(address.get('street')) ? address.save() : EMPTY_PROMISE(null); 
    }); // If street is present save the address, other wise send empty promise that resolves to null 

    return saveAddressPromise.then(address => { 
     if(Ember.isNone(address) { 
     org.set('address', null); // The street is not present still. dont save address record 
     } 

     return org.save(); 
    }).catch(sendError).finally(doSomething); 
} 

另一種方法是每次保存一個空記錄,那麼你就不會有這個.street檢查。

鈮! Empty_promise代碼示例

return new Ember.RSVP.Promise(function(resolve, reject) { 
     resolve(value); 
}); 
+0

感謝您的回答。我認爲每次company.address爲空時都可以創建新記錄。但是有沒有辦法在每個模型中自動完成?我在應用程序序列化器的normalizeResponse()中試了一下沒有成功。你有想法嗎? –

相關問題