EmberJS 重新打开类和实例
重新打开类和实例
这只是更新类的实现,而不重新定义它。这是必要的,只有当你不想扩展内置类,但更新其实现。这可以通过使用以下方法:
reopen():此方法通常会将属性和方法添加到实例。
reopenClass():方法会将属性和方法添加到类。
var Person = Ember.Object.extend({
firstName: null,
lastName: null
});
Person.reopen({
middleName: 'Smith'
});
var Person = Ember.Object.extend({
firstName: null,
lastName: null
});
Person.reopenClass({
createMan: function() {
return Person.create({isMan: true})
}
});
上面的代码描述了如何重新打开类Person,将变量名称middleName添加到实例,并使用reopenClass为Person类添加createMan函数。
例子
<!DOCTYPE html>
<html>
<head>
<title>Emberjs Reopening Classes and Instances</title>
<!-- CDN's-->
<script src="/attachements/w3c/handlebars.min.js"></script>
<script src="/attachements/w3c/jquery-2.1.3.min.js"></script>
<script src="/attachements/w3c/ember.min.js"></script>
<script src="/attachements/w3c/ember-template-compiler.js"></script>
<script src="/attachements/w3c/ember.debug.js"></script>
<script src="/attachements/w3c/ember-data.js"></script>
</head>
<body>
<script type="text/javascript">
//reopen() method for instances
var Person = Ember.Object.extend({
firstName: null,
lastName: null,
});
//adding new variable to the Person class
Person.reopen({
middleName: 'Smith',
});
document.write('Middle Name: '+Person.create().get('middleName'));
//reopenClass() method for classes
var Person = Ember.Object.extend({
firstName: null,
lastName: null,
});
Person.reopenClass({
//creating new method for class Person
createMan: function() {
return Person.create({isMan: true})
}
});
document.write('isMan: '+Person.createMan().get('isMan'));
</script>
</body>
</html>
输出
让我们执行以下步骤,看看上面的代码如何工作:
将以上代码保存在 reopncls_inst.html 文件中
在浏览器中打开此HTML文件。