ken*_*ken 1 ember.js ember-cli
我正在将一个JS组件包装到一个Ember Addon中,这是我以前做过很多次的事情,然而我在一开始就遇到了一个问题让我担心可能是魔术的"魔力"已经转移了略?无论如何希望可以解释为什么以下:
import Ember from 'ember';
import layout from '../templates/components/nav-menu';
export default Ember.Component.extend({
layout: layout,
tagName: 'nav',
classNames: ['navmenu','navmenu-default','navmenu-fixed-left'],
attributeNames: ['role:navigation'],
classNameBindings: ['offcanvas'],
hideAt: null,
offcanvas: function() {
let hideAt = this.get('hideAt');
if(!hideAt) {
return 'offcanvas';
} else {
return 'offcanvas-%@'.fmt(hideAt);
}
}.property('hideAt'),
_initialize: function() {
this.$().offcanvas();
}.on('didInsertElement')
});
Run Code Online (Sandbox Code Playgroud)
这有两个失败.原样,它在offcanvas计算属性中失败说:

未捕获的TypeError:undefined不是函数
很奇怪,但它变得更奇怪.如果删除此计算属性,则在_initialize()调用时失败,并显示相同的"未定义不是函数"错误:

我使用的是Ember 1.11.0,Ember-CLI 0.2.2.
你是对的,这与Ember CLI 0.2.2有关.来自更改日志:
Addons现在默认包含ember-disable-prototype-extensions,这确保了加载项的编写方式无论使用者原型扩展首选项如何都可以.
我看到他们在改变背后的推理,这是完全有道理的.您现在需要使用Ember.computed和Ember.on创建属性和观察者.所以这些:
initialize: function() {}.on('didInsertElement'),
offcanvas: function() {}.property('hideAt')
Run Code Online (Sandbox Code Playgroud)
成为这些:
initialize: Ember.on('didInsertElement', function() {}),
offcanvas: Ember.computed('hideAt', function() {})
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关禁用原型扩展的更多信息.
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |