在EmberJS中重新绑定时,不会反映数组值

时间:2016-08-27 02:44:46

标签: javascript html ember.js

我有一个数组(['Name1','Name2','Name3']),我在页面Load填充。 现在按下按钮,我想为该数组分配一些其他值,并填充相同的

App.myArray = ['Name4','Name5','Name6'] 

但它没有反映出来。

完整代码

<!DOCTYPE html>
<html>
   <head>      
      <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js"></script>
      <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.10.0/ember.min.js"></script>
      <script src="http://builds.emberjs.com/tags/v1.10.0-beta.3/ember-template-compiler.js"></script>
      <script src="http://builds.emberjs.com/release/ember.debug.js"></script>
      <script src="http://builds.emberjs.com/beta/ember-data.js"></script>
   </head>
   <body>

      <script type="text/x-handlebars">
         {{outlet}}
      </script>


      <script type="text/x-handlebars" data-template-name="index">
      <button {{action "ClickFn"}}>Click Here</button>
         <ul>

            {{#each value in App.myArray}}               
               <li>{{value}}</li>
            {{/each}}
         </ul>
      </script>

      <script type="text/javascript">
         var App = Ember.Application.create()

         App.myArray = ['Name1','Name2','Name3']         

         App.IndexRoute = Ember.Route.extend({

            actions: {

               ClickFn: function() {

                  App.myArray = ['Name4','Name5','Name6'] 
                  console.log(App.myArray) ;               
               }
             }
         });

      </script>
   </body>
</html>

目前的情况是

enter image description here

我正在寻找按钮点击时的输出

enter image description here

2 个答案:

答案 0 :(得分:3)

使用Ember.set方法进行更改以在模板中反映更改。所以只需用下面的

替换App.myArray = ['Name4', 'Name5', 'Name6']
 Ember.set(App,'myArray',['Name4', 'Name5', 'Name6']);

我会说不要使用全局变量来做这种事情。你可以在IndexRoute中引入它。(我猜你是为测试目的而做的。)

答案 1 :(得分:1)

App是一个Ember对象,myArray是我们无法使用assignment运算符直接设置Ember对象属性值的属性之一。 我们必须使用setter函数。

你可以使用Ember.set

1。Ember.set(App,'myArray',['Name4', 'Name5', 'Name6']);

或者您也可以使用set对象提供的App方法来设置其属性。

  1. App.set('myArray',['Name4', 'Name5', 'Name6']);