3

用語を正しく理解するのに最も苦労しています。次のコードでは:

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:」とは何ですか?

それらはメソッドですか、プロパティですか、それともフックですか? 違いは何ですか?また、「createNewNote」が「actions:」内にネストされていると、「actions」がまったく異なるものになりますか?

ember の「フック」と、作成して自分で名前を付けたメソッド/プロパティの違いと、それらの使用方法は何ですか?

ありがとうございました。'

[アップデート]

「コンテンツ」はどこから来るのですか?

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ハンドルヘルパーは付属していますか?

4

6 に答える 6

2

以前の回答はすべて正しいですが、質問で使用されている Ember の規則に対処するものはありません。

newNoteNameのプロパティですNotesController。と呼ばれるテンプレート内で、を使用'notes'して表示し{{newNoteName}}たり、入力で使用したりできます{{input value=newNoteName}}。でNotesController値を読み取り、 で値をthis.get('newNoteName')設定できますthis.set('newNoteName')

actionsEmber コントローラの特別なプロパティです。ハッシュで宣言された関数はactions、テンプレートで呼び出すことができます。例createNewNoteとして、次のようなものを使用して、ボタンのクリックに応答して関数を呼び出すことができます。

<button {{action 'createNewNote'}}>Create New Note</button>

createNewNoteコントローラーアクションです。上記のようにテンプレートから呼び出すことも、 を使用して他のコントローラーまたはビューから呼び出すこともできますsend

別のコントローラーからは、次のようになる場合があります。

Notes.OtherController = Ember.Controller.extend({
  needs : ["notes"],
  actions : {
    someAction : function(){
      this.get('controllers.notes').send('createNewNote');
    }
  }
});

[更新] : フックに関する質問への対処。

In Ember フックは、オブジェクト階層とライフサイクルを管理する際に Ember がさまざまな時点で呼び出す、オブジェクトで作成できる関数です。たとえば、フックRouteを実装したいことがよくあります。で呼び出されるmodel関数を宣言した場合modelRouteの場合、Ember は、そのルートによって表されるモデルを取得する必要があるときに、そのメソッドを自動的に呼び出します。これにより、ルート/コントローラーの作成とセットアップの方法で Ember が行うすべてのことを実装する必要なく、Ember がモデルを検索するデフォルトの方法をオーバーライドできます。フック メソッドは、実際にはオブジェクトに実装する他のメソッドと技術的に違いはありません。唯一の本当の違いは、Ember が適切なタイミングでフック メソッドを自動的に呼び出すことです。

[UPDATE 2] : どこ'content'から来たの?

contentコントローラーが表すオブジェクトです。ルートはコントローラーに設定され、フックcontentから取得されます。modelEmber にはいくつかのスマートなデフォルトが組み込まれており、Router. modelただし、フックを実装して、必要なものを何でも返すことができます。

自分で作成していない場合Notes.NotesRoute、Ember はこれとほぼ同等のものを生成しています。

Notes.NotesRoute = Ember.Route.extend({
  model : function(){
    return this.store.find('note');
  }
});

そのコントローラーはすべてのモデルを見つけてNote、そのコレクションを のcontentプロパティに設定していますNotesController

于 2013-09-20T05:14:27.130 に答える
0

「newNoteName」はプロパティです。「アクション」はプロパティです。「createNewNote」はメソッドです。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objectsをご覧になることをお勧めします

于 2013-09-19T21:19:53.083 に答える
0

それらはすべてプロパティまたは「名前」です。

JSON について考えると、何が起こっているのかをよりよく理解するのに役立ちます。

オブジェクトがあると考えてください。名前を付けることで、このオブジェクトのプロパティを設定できます。このプロパティには、オブジェクト、文字列、配列、関数などの値を割り当てることができます。

var myObject = { propertyName : propertyValue }
于 2013-09-19T21:22:58.970 に答える