it-swarm-id.com

Cara menyampaikan parameter ke tampilan

Saya memiliki serangkaian tombol yang ketika diklik menampilkan menu popup yang berada tepat di bawah tombol. Saya ingin meneruskan posisi tombol ke tampilan. Bagaimana saya bisa melakukan itu?

ItemView = Backbone.View.extend({
    tagName: 'li',
    events: {
        'click': 'showMenu'
    },
    initialize: function() {
        _.bindAll(this, 'render');
    },
    render: function() {
    return $(this.el).html(this.model.get('name'));
    },
    showMenu: function() {
        var itemColl = new ItemColl();
        new MenuView({collection: itemColl}); // how to pass the position of menu here?
    }
});
93
vikmalhotra

Anda hanya perlu melewatkan parameter tambahan saat Anda membangun MenuView. Tidak perlu menambahkan fungsi initialize.

new MenuView({
  collection: itemColl,
  position: this.getPosition()
})

Dan kemudian, dalam MenuView, Anda dapat menggunakan this.options.position.

UPDATE: As @ mu terlalu pendek , karena 1.1.0, Backbone Views tidak lagi secara otomatis melampirkan opsi diteruskan ke konstruktor sebagai this.options, tetapi Anda dapat melakukannya sendiri jika Anda mau.

Jadi dalam metode initialize Anda, Anda dapat menyimpan options diteruskan sebagai this.options:

initialize: function(options) {
    this.options = options;
    _.bindAll(this, 'render');
},

atau gunakan beberapa cara yang lebih baik sebagai dijelaskan oleh @Brave Dave .

167
dira

Tambahkan argumen opsi ke initialize:

initialize: function(options) {
    // Deal with default options and then look at options.pos
    // ...
},

Dan kemudian berikan beberapa opsi saat Anda membuat tampilan:

var v = new ItemView({ pos: whatever_it_is});

Untuk informasi lebih lanjut: http://backbonejs.org/#View-constructor

46
mu is too short

Pada backbone 1.1.0, argumen options adalah tidak lagi dilampirkan secara otomatis ke tampilan (lihat masalah 2458 untuk diskusi). Anda sekarang harus melampirkan opsi dari setiap tampilan secara manual:

MenuView = Backbone.View.extend({
    initialize: function(options) {
        _.extend(this, _.pick(options, "position", ...));
    }
});

new MenuView({
    collection: itemColl,
    position: this.getPosition(),
    ...
});

Atau Anda dapat menggunakan plugin mini ini untuk melampirkan opsi putih yang terdaftar secara otomatis, seperti:

MenuView = Backbone.View.extend({
    options : ["position", ...] // options.position will be copied to this.position
});
12
Brave Dave