0

私は次のようないくつかのビューを整理しようとしています:

define([
  // Application.
  "app"
],

function(app) {

  var Partials = app.module();

  Partials.classes = {
    'AccountNavStart' : AccountNavStart = Backbone.View.extend({
       template: 'member/account-nav',
       serialize: function(){
         return { model: this.model };
       }
     });

  // Required, return the module for AMD compliance.
  return Partials;
});

与える:

new Popover.Views.Default({ 
    content: new Partials.classes['AccountNavStart']().render().$el
});

ただし、エラーが発生します。

Uncaught TypeError: Cannot call method 'get' of undefined

ここに画像の説明を入力

このエラーが発生する方法はありますか? 修正方法は?

4

1 に答える 1

3

これを試して:

編集:これはバックボーンボイラープレートアプリなので、答えを更新します:

問題は、レンダリング後にビューの「Partials」モジュールの $el を取得する方法です。モジュールを定義し、Backbone ビューをそのメンバーとして宣言しようとしています。次に、view のインスタンスを作成し、view.render().$el を介してメソッド呼び出しをチェーンします。Backbone Boilerplate render() にはデフォルトの動作があるため、ビューの $el を正常に取得します。ネイティブ バックボーン レンダリング関数は、オーバーライドできるように設計されています。

私の簡単な例:

モジュール宣言 (モジュール/ユーザー):

define(["app"],

function(app){
    var User = app.module();

    User.Views.Item = Backbone.View.extend({
        template: "user/item",
        tagName: "li",
        serialize: function(){
            return {model: this.model};
        },
        initialize: function(){
            this.listenTo(this.model, "change", this.render);
        }
    });

return User;

});

アイテム テンプレート (templates/user/item.html)

<a href="#"><%=model.get("name")%></a>

Router の初期化呼び出しでビューの $el を取得してみてください

define([
// Application.
"app","modules/user"
],

function(app, User) {

    // Defining the application router, you can attach sub routers here.
    var Router = Backbone.Router.extend({
    initialize: function(){
        app.useLayout("main-layout").setViews({
            ".users":new User.Views.Item({model:new Backbone.Model({"name":"cccc"})})
        }).render();

        //try to access $el. it works
        console.log(new User.Views.Item({model:new Backbone.Model({"name":"cccc"})}).render().$el);
    },
    routes: {
        "": "index",
        "user/:name":"user"
    },

    index: function() {

    },
    user: function(){

    }
    });

    return Router;

});

最後に $el を取得しました:

$エル!

これがお役に立てば幸いです。

于 2013-07-02T09:10:07.800 に答える