10

私はここに私の質問をコード例に入れました:

http://jsbin.com/urukil/12/edit

{{action}}(子ビューに配置されている) をtargetオプション付きで使用して、ApplicationViewまたはApplicationControllerまたはでイベントをトリガーできますが、本当に必要なChildViewのみを除きます。ChildController

ドキュメントによると、指定されていない場合target、イベント自体は対応するコントローラーで処理する必要がありますChildController。しかし、なぜこのアクションは常に を検索するのApplicationControllerでしょうか? 明らかに重要なことを見逃していませんか?

4

4 に答える 4

7

this.controllerFor('')別のコントローラ イベントを呼び出すために使用します。実際の例を以下に示します。

JS:

/// <reference path="Lib/ember.js" />
var app = Ember.Application.create()
app.Router.map(function () {
    this.resource('post')

});
app.ApplicationRoute = Ember.Route.extend({

    model: function () { 
        return { "firstName": "amit", "lastName": "pandey" }
    }
});
app.ApplicationController = Ember.ObjectController.extend({
    Address: "House no 93-B",
    fullName: function () {
        return this.get("model.firstName") + " " + this.get("model.lastName")
    }.property("model.firstName", "model.lastName"),
    actions: {
        submit: function (name) {

            this.controllerFor('post').send('handleclick')

        },
        makeMeUpper:function()
        {
            alert('calling application controller Event');
           this.set("model.firstName",this.get("model.firstName").toUpperCase())
        }


    }



});


app.PostRoute = Ember.Route.extend({
    model:function()
    {
        return user;


    }


});
app.PostController = Ember.ObjectController.extend({
    Hello: "afa",
    handleclick: function ()
    {
        alert('calling post controller Event');

        this.controllerFor('application').send('makeMeUpper');
    }


});


var user = [
    {
        id: "1",
        Name: "sushil "

    },
    {
        id: "2",
        Name: "amit"

    }

];

//hbs

 <script type="text/x-handlebars">
      <button {{action submit firstName}}>CLICK HERE TO CALL Post controller event</button>
       {{input type="text" action= "makeMeUpper" value=firstName }}     

       {{#if check}}
      No Record Exist

       {{else}}
       {{firstName}}{{lastName}}
       {{/if}}
       {{#linkTo 'post'}}click {{/linkTo}}
       {{outlet}}
   </script>
        <script type="text/x-handlebars" id="post">

            <button {{action hanleclick}}>Click here to call application controller event</button>
        </script>
于 2013-09-17T18:17:05.437 に答える
0

controllerFor は非推奨になっているため、これを行う正しい方法は、コントローラーでニーズを指定し、コントローラー リストから取得して、そこに送信することです。例:

App.SomeController = Em.Controller.extend({
  needs: ['other'],
  actions: {
    sayHello: function () {
    console.log("Hello from inside SomeController.");
    this.get('controllers.other').send('helloAgain');
    }
  }
});

App.OtherController = Em.Controller.extend({
  actions: {
    helloAgain: function () {
      console.log("Hello again from inside OtherController!");
    }
  }

});

編集:おっと...誰かがすでにこの回答を本質的に投稿しているようです。必要に応じて改訂します。

于 2015-03-06T19:46:32.903 に答える