SORU
6 Mart 2012, Salı


Nakavt Görünüm Modelleri arasındaki fark nesne vs fonksiyonları hazır olarak ilan etti

Knockout js Görünümünde Model olarak ya da bir ilan gördüm:

var viewModel = {
    firstname: ko.observable("Bob")
};

ko.applyBindings(viewModel );

ya da:

var viewModel = function() {
    this.firstname= ko.observable("Bob");
};

ko.applyBindings(new viewModel ());

Varsa ikisi arasındaki fark nedir?

Ama beni gerçekten tatmin edici bir cevap vermedi knockoutjs google grup this discussion buldum.

Eğer, örneğin: bazı veri ile model yeniden istesem de bir sebep göremiyorum

var viewModel = function(person) {
    this.firstname= ko.observable(person.firstname);
};

var person = ... ;
ko.applyBindings(new viewModel(person));

Ama eğer öyle yapıyorum yoksa ben hangi bir önemi var mı?

CEVAP
6 Mart 2012, Salı


Görünüm modelinizi tanımlamak için bir fonksiyon kullanmanın yararları bir çift vardır.

Ana avantajı örneği oluşturulan eşittir this değeri anında erişim var. Bu yapabilirsiniz anlamına gelir:

var ViewModel = function(first, last) {
  this.first = ko.observable(first);
  this.last = ko.observable(last);
  this.full = ko.computed(function() {
     return this.first()   " "   this.last();
  }, this);
};

Yani, hesaplanan senin gözlemlenebilir eğer farklı bir kapsam aramış olsaydın bile this uygun değerine bağlı olabilir.

Değişmez bir nesne ile yapmak zorunda:

var viewModel = {
   first: ko.observable("Bob"),
   last: ko.observable("Smith"),
};

viewModel.full = ko.computed(function() {
   return this.first()   " "   this.last();
}, viewModel);

Bu durumda, sen-ebil kullanma viewModel doğrudan hesaplanan gözlemlenebilir, ama oradan hemen değerlendirilerek (varsayılan) diye tanımlamak içindeki nesne değişmez, gibi viewModel tanımlanmamış kadar sonra nesne değişmez kapalı. Birçok insan görünümü model oluşturma Bir ara içine kapsüllenmiş değil sevmiyorum.

this her zaman uygun olduğundan emin olmak için kullanabileceğiniz başka bir kalıp işlev değişken this uygun değere ayarlayın ve yerine kullanmaktır. Bu gibi olabilir:

var ViewModel = function() {
    var self = this;
    this.items = ko.observableArray();
    this.removeItem = function(item) {
         self.items.remove(item);
    }
};

Şimdi, eger kapsamında bireyin madde ve Ara $root.removeItem değeri this aslında bilgi saplanıp düzeyi (gerekli olan madde). Bu durumda kendini kullanarak, genel görünüm modeli kaldırılıyor emin olabilirsiniz.

Başka bir seçenek eğer destekleniyorsa değil `modern tarayıcılar tarafından desteklenen ve KO tarafından eklenen bağlamak kullanıyor. Bu durumda, gibi görünecektir:

var ViewModel = function() {
    this.items = ko.observableArray();
    this.removeItem = function(item) {
         this.items.remove(item);
    }.bind(this);
};

Orada çok daha fazla olabilir dedi Bu konu hakkında ve pek çok desen, o olabilir keşfetmek gibi modül desen ve açığa modül desen), ama temel olarak kullanarak bir fonksiyon verir, daha fazla esneklik ve kontrol üzerinde nasıl bir nesne alır oluşturulan ve yeteneği için referans değişkenler bu özel bir örnek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • inovationgmbh

    inovationgmb

    28 EYLÜL 2010
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010