1. 数组的 addObjects 方法不能对 undefined 的使用.

{% highlight javascript %}

//假如结果是 undefined 的 var nothing = this.store.get(‘nothing’); // 下面的代码会出错, 报 forEach 没有定义 [].addObjects(nothing);

{% endhighlight %}

原因是 addObjects 会期待形参中的对象有 forEach 方法, 个人觉得这里不要报错啥都不做比较好.

  1. 看下面的例子:

{% highlight javascript %}

try { var nothing = this.store.get(‘nothing’); } catch (e) { alert(‘my god, 异步的异常捕捉不带, 咋整?') }

{% endhighlight %}

this.store.get 返回的是 promise, 是一个异步的东东, 如果异步的回调出现问题, 比如 sideload 的数据不对时, 会抛出异常, 而且因为是异步的, 你还不能直接捕捉到, 暂时没想到好的办法, 只能让这部分不出现问题. 我碰到这个问题的原因是 sideload 的数据不完整, 通过修改数据完整性解决.

  1. ember 中 controller 的 needs. 在 ember 中是使用 needs 来传递 依赖, 如果每个 controller 对象只有一个实例时, 没有问题. 但如果有多个实例呢, 比如下面这个代码.

{% highlight javascript %}

// PersonController

// BlogController needs: [‘person’],

actions: {

submit: function() { // 下面获得的 person controller 可能是个全新的, 而不是你期望的 this.get(‘controllers.person’).send(‘submit’); } }

{% endhighlight %}

如果我在模板中 render 了多个 person, ember 不知道你 needs 的是哪一个 person controller, 然后就创了一个新的给你, 然后你就丢掉了上下文, 发现怎么逻辑不对.. {% highlight html %} {% raw %}

{{#each person in team}} {{render ‘person’ person}} {{/each}}

{% endraw %} {% endhighlight %}