2017-05-15 17 views
0

次のコードでは、 "application.js:72 TypeError:_this2.get(...)。toArrayは関数ではありません"というエラーが表示されます。私はモデルが動的に更新されるように、モデルへのサーバーの応答から来るものをプッシュしようとしています。これはコントローラで起こっています。コントローラは、テンプレート内の別のコンポーネントからアクションをインターセプトします。ここで何がうまくいかないのですか?EmberモデルaddObject関数ではありません

actions: { 
sendData: function() { 
    this.set('showLoading', true); 

    let data = { 
    startTime: date.normalizeTimestamp(this.get('startTimestamp')), 
    endTime: date.normalizeTimestamp(this.get('endTimestamp')), 
    type: constants.ENTERPRISE.REPORTING_PAYMENT_TYPE 
    }; 

    api.ajaxPost(`${api.buildV3EnterpriseUrl('reports')}`, data).then(response => { 
    this.set('showLoading', false); 

    console.log("Comes here!!!!"); 
    console.log(this.get('model')); 
    this.get('model').toArray().addObject(Ember.Object.create(response)); 

    return response.report; 
    }).catch(error => { 
    this.set('showLoading', false); 
    if (error.status === constants.HTTP_STATUS.GATEWAY_TIMEOUT) { 
     this.notify.error(this.translate('reports.report_timedout'), this.translate('reports.report_timedout_desc')); 
    } else { 
     this.send('error', error); 
    } 
    }); 
} 

答えて

0

「モデル」はモデルデータモデルですか?もしそうなら、それは実際に約束かもしれません、そしてtoArrayはその場合には動作しません。この問題を解決するには、完全に解決したモデルを返すか、.thenを使用して配列に変換します。 補足として、モデルにレスポンスを追加するという唯一の目的がある場合は、すべての変換を行わずにモデルに直接オブジェクトを追加するだけで済みます。おそらくEmber.set(モデル、 'newAttr'、Ember.Object.create(レスポンス))」のようなもの;。! と、このことができますnewAttrに格納された情報を使用

希望:)

+0

私はモデルからRSVP.hashを返します。しかし、私は確信してハッシュしています私がリクエストした時点で既に解決されています。応答に感謝します。 –

+0

ブレークポイントを設定して解決したことを確認できますか?内容を確認していますか?非同期の関係がある場合は、別の原因かもしれません。 –

0

あなたが戻るとRSVP.hash今モデルはちょうどobjectあるので、あなたがthis.get('model').toArray()を行うことはできません。私はあなたがthis.get('model.reportsOrSomethingWhichYouReturnFromModelHook')のようなモデルなものからの正確な性質を取る必要があるかもしれませんね。

+0

解決されていない場合は、ルートモデルのフック部分とsetupControllerフックを含めることを検討してください。 – kumkanillam

関連する問題