我工作Ember.js 2.12.0如何防止控制器和部件之間的嵌套陣列對象的同步在餘燼
如何防止控制器和部件之間的嵌套陣列對象的同步。
對於ember字符串的工作,但對於嵌套數組對象,它不工作。
下面是燼玩弄鏈接
在玩弄如果你改變字符串和ARR的價值和點擊HOME路線,再來約路線,那麼你可以看到,值字符串被更改,但值arr沒有變化
在此先感謝您的幫助。
我工作Ember.js 2.12.0如何防止控制器和部件之間的嵌套陣列對象的同步在餘燼
如何防止控制器和部件之間的嵌套陣列對象的同步。
對於ember字符串的工作,但對於嵌套數組對象,它不工作。
下面是燼玩弄鏈接
在玩弄如果你改變字符串和ARR的價值和點擊HOME路線,再來約路線,那麼你可以看到,值字符串被更改,但值arr沒有變化
在此先感謝您的幫助。
String是一個primitive typed對象,但數組不是。所以當組件修改str
時,它不反映到控制器的str
。因爲您正在組件中複製其值。您可以通過將{{str}}
添加到about.hbs
來嘗試此操作。看到它沒有改變。 (在你當前的旋轉中)。
但是數組是不同的。這不僅僅是一種價值。組件的arr與控制器arr相同。當組件修改它時,您可以在about.hbs
中看到更改。 (另請參閱按值傳遞,通過引用。)
另一方面,控制器是singleton,它們將最後一個值存儲在它們上面。所以每當你改變數組時,你都可以看到它是持久的。
上面我提到了原因。下面我會提及解決方案:
model
掛鉤來生成併發送數組。我也修改了您的組件,請參閱this twiddle。
此外,不要在對象定義中定義數組。因爲該類的所有實例都將共享相同的數組實例。 (它也寫在the guide某處。)
import Ember from 'ember';
export default Ember.Route.extend({
setupController(controller, model){
controller.set("arr",[{name:'ravi kumar'}])
}
});
這將確保您總是得到ARR重置。
這個文件你在路線創建/ about.js
#ykaragol感謝回覆。你可以現在檢查twiddle。如果我們使用某個變量重置setupcontroller中的ARR值,那麼它不起作用。 –
@dilipkumar搓?[這一個](https://ember-twiddle.com/3d2b91475a9b0fd4a0bd60348dcca387)正在工作 – ykaragol
你可以請檢查[這一個](https://ember-twiddle.com/ea710917665fbb69721042af93c22063) –