我很难正确使用术语。在以下代码中:
Notes.NotesController = Ember.ArrayController.extend({
newNoteName: null,
actions: {
createNewNote: function() {
var content = this.get('content');
var newNoteName = this.get('newNoteName');
var unique = newNoteName != null && newNoteName.length > 1;
content.forEach(function(note) {
if (newNoteName === note.get('name')) {
unique = false; return;
}
});
if (unique) {
var newNote = this.store.createRecord('note');
newNote.set('id', newNoteName);
newNote.set('name', newNoteName);
newNote.save();
this.set('newNoteName', null);
} else {
alert('Note must have a unique name of at least 2 characters!');
}
}
}
});
什么是“newNoteName:”、“actions:”和“createNewNote:”?
它们是方法、属性还是钩子(Hook)?有什么区别? “createNewNote”嵌套在“actions:”中是否会使“actions”完全不同?
您创建并命名的 ember“ Hook ”和方法/属性之间有何区别以及它们的使用方式?
谢谢。'
[更新]
“内容”从何而来?
Notes.NotesNoteController = Ember.ObjectController.extend({
actions: {
updateNote: function() {
var content = this.get('content');
console.log(content);
if (content) {
content.save();
}
}
}
});
它不是模型的属性,所以 Ember 怎么知道用什么检索
this.get('content')
它是否带有 textArea
Handlebars 助手?
最佳答案
之前的所有答案都是正确的,但是,它们都没有解决您问题中起作用的 Ember 约定。
newNoteName
是 NotesController
的属性。在名为 'notes'
的模板中,您可以使用 {{newNoteName}}
显示它,或使用 {{input value=newNoteName}} 在输入中使用它
。在 NotesController
中,您可以使用 this.get('newNoteName')
读取值,并且可以使用 this.set('newNoteName')< 设置值
.
actions
是 Ember Controller 的一个特殊属性。在 actions
散列中声明的任何函数都可以在模板中调用。以 createNewNote
为例,您可以使用类似这样的方法来调用函数以响应按钮点击:
<button {{action 'createNewNote'}}>Create New Note</button>
createNewNote
是一个 Controller Action 。它可以从模板调用,如上所示,也可以使用 send
从其他 Controller 或 View 调用。
从另一个 Controller 你可能有这个:
Notes.OtherController = Ember.Controller.extend({
needs : ["notes"],
actions : {
someAction : function(){
this.get('controllers.notes').send('createNewNote');
}
}
});
[更新]:解决关于钩子(Hook)的问题。
在 Ember 中, Hook 是您可以在对象上创建的函数,Ember 在管理对象层次结构和生命周期时会在不同的点调用这些函数。例如,在 Route
中,您通常希望实现 model
Hook 。如果您在 Route
中声明了一个名为 model
的函数,那么 Ember 将在需要获取由该函数表示的模型时自动调用该方法路线。这允许您覆盖 Ember 查找模型的默认方式,而无需同时实现 Ember 在创建和设置路由/ Controller 时所做的所有事情。 Hook 方法在技术上与您可能在对象上实现的其他方法没有什么不同,唯一真正的区别是 Ember 会在适当的时候自动调用 Hook 方法。
[更新 2]:'content'
来自哪里?
content
是您的 Controller 所代表的对象。路由在 Controller 上设置 content
,并从 model
Hook 中检索。 Ember 内置了一些智能默认设置,它们会尝试根据您的 Router
做正确的事情。但是您可以实现 model
Hook 以返回您想要的任何内容。
如果您还没有自己创建 Notes.NotesRoute
,那么 Ember 会为您生成一个或多或少等同于此的:
Notes.NotesRoute = Ember.Route.extend({
model : function(){
return this.store.find('note');
}
});
该 Controller 正在查找所有 Note
模型并将该集合设置为 NotesController
的 content
属性。
关于javascript - 这是一个 javascript 方法还是属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905022/