0

それに関する 20 以上の異なる記事やフォーラムのトピックを読み、さまざまな解決策を試しましたが、うまくいきませんでした。次のコードは機能しません。誰かの助けが必要です...

LoginView.js

var LoginView = Backbone.View.extend({   
    //el: $('#page-login'),
    initialize: function() {
        _.bindAll(this, 'gotoLogin', 'render');
        //this.render();
    },

    events: {
        'click #button-login': 'gotoLogin'
    },

    gotoLogin : function(e){
        e.preventDefault(); 
        $('#signup-or-login').hide();           
        $('#login').show();
        return true;
    }       
});

login.html

<div data-role="page" id="page-login">

<!-- SignUp or Login section-->
<div id="signup-or-login" data-theme="a">
    <a data-role="button" data-theme="b" id="button-signup"> Sign Up </a>
    <a data-role="button" data-theme="x" id="button-login"> Login </a>      
</div>

<!-- Login section--> 
<div id="login" data-theme="a">
    <button data-theme="b"> Login </button>
    <button data-theme="x"> Cancel </button>
</div>

</div>

ページは Backbone.Router 拡張クラスのメソッドで作成されます。

loadPage('login.html', new LoginView());
4

1 に答える 1

1

私が理解している$.mobile.loadPage()ことから、目的のhtmlを取得してDOMに添付します。

現在、がインスタンス化されelた後に設定しようとしています。View

ただし、Backbone.View がアタッチelされ、$el インスタンス化されると次のようになることに注意してください。

var View = Backbone.View = function(options) {
  ...
  this._ensureElement();
  this.initialize.apply(this, arguments);
  this.delegateEvents();
};

また、セレクターまたはオブジェクト化された jQuery を渡すことによってView.setElement()設定されることにも注意してください。$elView.el

setElement: function(element, delegate) {
  if (this.$el) this.undelegateEvents();
  this.$el = element instanceof Backbone.$ ? element : Backbone.$(element);
  this.el = this.$el[0];
  if (delegate !== false) this.delegateEvents();
  return this;
}

結論:

elインスタンス化中に(提供されたjQueryオブジェクトを使用して)設定する必要があります:

// Where `view` is a reference to the constructor, not an instantiated object
var loadPage = function(url, view) {

  $.mobile.loadPage(url, true).done(function (absUrul, options, page) {
    var v,
        pageId = page.attr('id');

    v = new view({
      el: page
    });

    ...
  }

}

loadPage()次のように呼び出します。

loadPage('login.html', LoginView);

これによりBackbone.View$elイベントを委任する対象が与えられます。

于 2013-10-23T13:58:09.620 に答える