2017-04-13 33 views
0

我工作Ember.js 2.12.0如何防止控制器和部件之間的嵌套陣列對象的同步在餘燼

如何防止控制器和部件之間的嵌套陣列對象的同步。

對於ember字符串的工作,但對於嵌套數組對象,它不工作。

下面

是燼玩弄鏈接

ember twiddle

在玩弄如果你改變字符串ARR的價值和點擊HOME路線,再來約路線,那麼你可以看到,值字符串被更改,但值arr沒有變化

在此先感謝您的幫助。

回答

1

String是一個primitive typed對象,但數組不是。所以當組件修改str時,它不反映到控制器的str。因爲您正在組件中複製其值。您可以通過將{{str}}添加到about.hbs來嘗試此操作。看到它沒有改變。 (在你當前的旋轉中)。

但是數組是不同的。這不僅僅是一種價值。組件的arr與控制器arr相同。當組件修改它時,您可以在about.hbs中看到更改。 (另請參閱按值傳遞,通過引用。)

另一方面,控制器是singleton,它們將最後一個值存儲在它們上面。所以每當你改變數組時,你都可以看到它是持久的。

上面我提到了原因。下面我會提及解決方案:

  1. 方法1,在將數組發送到組件之前克隆數組。
  2. 方法2,重置路由的特定鉤子中的數組。
  3. 方法3,使用model掛鉤來生成併發送數組。

我也修改了您的組件,請參閱this twiddle

此外,不要在對象定義中定義數組。因爲該類的所有實例都將共享相同的數組實例。 (它也寫在the guide某處。)

+0

#ykaragol感謝回覆。你可以現在檢查twiddle。如果我們使用某個變量重置setupcontroller中的ARR值,那麼它不起作用。 –

+1

@dilipkumar搓?[這一個](https://ember-twiddle.com/3d2b91475a9b0fd4a0bd60348dcca387)正在工作 – ykaragol

+0

你可以請檢查[這一個](https://ember-twiddle.com/ea710917665fbb69721042af93c22063) –

0
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    setupController(controller, model){ 
    controller.set("arr",[{name:'ravi kumar'}]) 
    } 
}); 

這將確保您總是得到ARR重置。

這個文件你在路線創建/ about.js