3

私は Ember 1.0pre を使用しており、Ember が推奨するアプリケーション構造(ルーターを使用) に従っています。フォームの検証のために、ボタンのクリック時に$('form').valid()
メソッド を呼び出したいと思います。だから私は私の見解で次の方法を持っています

validate: function(){
  return this.$('form').valid()
}

テンプレート ファイルでのアクション:

<button type="submit" class="btn" {{action doSaveSettings this}}>Save Changes</button>

doSaveSettingsメソッドは Controller にあります。検証メソッドを呼び出すために、コントローラーでビューのインスタンスを取得するにはどうすればよいですか?

編集:
コントローラーでは、this.view は null です。テンプレートに {{debugger}} を配置しました。これは <App.XyzController:ember1062> を参照し、this.view は null です。

4

2 に答える 2

1

アクションのデフォルトのターゲットは、ember 0.9.8.1 でビューからルーターに変更されました (私は信じています)。ターゲットをビューに設定するには、次のようにオーバーライドする必要があります

 <button type="submit" class="btn" {{action doSaveSettings target="view"}}>Save Changes</button>

編集: コントローラーはビューについて認識すべきではありません。

于 2012-08-29T15:20:30.897 に答える
0

残りのビューの目的は、繰り返しますが、イベントを処理するか、再利用可能なコンポーネントを作成することだけです
。ビューがコントローラーからアクセスされることを意図していない理由が常にあり、それに従うのが良いため、これはお勧めしません。本当に使いたい場合は、次の 2 つの方法を実行できます
。ember-cli を使用するか、ember を使用するかはわかりませんが、ロジックは同じです。ただし、答えは ember-cli 用です

//Inside appname/controller/your-conroller.js

import reqdView from 'appname/views/your-view';

//Lets assume u want to call a function called validate inside view
//Add this statement inside the controller to run the validate function

reqdView.prototype.validate();

OR

var reqdViewInst = new reqdView();
reqdViewInst.validate();

ビューを検証する場合は、didInsertElement 内で検証を行います

export default Ember.View.extend({
didInsertElement:function()
{
  this.validate(); 
},
validate:function()
{
//do your validation
}
});

また

export default Ember.View.extend({
eventManager: Ember.Object.create({
    didInsertElement:function(event, view)
    {
      view.validate(); 
    }
  }),

    validate:function()
    {
    //do your validation
    }
    });
于 2014-08-12T08:42:47.497 に答える