Soru Backbone.js koleksiyonu seçenekleri


Backbone.js'yi kullanarak bir model / görünüm / koleksiyon yazdım. Koleksiyonum, modelleri uzak bir sunucudan yüklemek için getirme yöntemini kullanır. Bu koleksiyon için gereken URL, şu gibi bir kimlik gerektiriyor: messages / {id}. Ancak, Koleksiyona seçenekleri iletmek için temiz bir yol bulamadım.

Backbone.js görünümü, seçenekleri yapıya geçirerek kabul eder: view ([options]), ancak koleksiyon, bir modelin yapım aşamasında olmasını bekler: collection ([models]).

Bu koleksiyona parametre / seçenek aktarmanın "en temiz" yolu nedir?

Kısaltılmış kod:

var Messages = Backbone.Collection.extend({
 model: Message,
   url: 'http://url/messages/' + id
});

44
2017-12-11 13:49


Menşei


belki göreli url kullanarak da daha iyi bir fikirdir? - malletjo


Cevaplar:


Paul'un cevabı iyidir, ama aynı zamanda url öznitelik bir işlev olabilir. Benim düşünceme göre (ve sonuç sadece aynıdır, çünkü sonuç aynıdır), kodu biraz daha okunaklı, eğer daha fazla ayrıntı varsa initialize ve bir fonksiyonda referans:

var Messages = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.id = options.id;
  },
  url: function() {
    return '/messages/' + this.id;
  },
  model: Message,
});

var collection = new Messages([], { id: 2 });
collection.fetch();

Sadece emin olmak için - sen kafa karıştırıcı değilsin id Model ile burada id, sen? @ Paul'un cevabı ve yukarıdaki kodum, birden fazla hesabınızın olduğunu varsayalım Messages her biri kendi kimliğine sahip koleksiyonlar. API yolu ise /messages/<id> aslında bir mesaj, bir grup mesaj değil, o zaman sadece url için /messages/ Koleksiyon'da ve Omurga otomatik olarak kullanılacak /messages/<id> her model için.


107
2017-12-11 16:51



teşekkür ederim Nick böyle basit ve açık bir örnek için. Keşke cevabını görebilseydim, bir gün kurtarırdım .... Tekrar teşekkürler. - Shubh
Evet, bu benim için undefined ile sonuçlanır. Aşağıdaki cevap çalışır. - zeros-and-ones


URL özelliğinin bildirilme biçiminiz, tarayıcı başlangıçta javascript dosyasını yüklediğinde ve 'id' tanımsız olacaksa, değer bir kez belirlenir.

Backbone.Collection, yapıcısında ikinci bağımsız değişken olarak seçenekleri kabul eder, böylece id değerini bir seçenek olarak iletebilir ve ardından url değerini koleksiyonun başlatma işlevi içinde ayarlayabilirsiniz.

İşte bir örnek

var Messages = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.url = 'http://url/messages/' + options.id;
  },
  model: Message,
});

var collection = new Messages([], { id: 2 });
collection.fetch();

23
2017-12-11 14:01