2012-02-16 16 views

cevap

12

bind numaralı telefonu aradığınızda, ilk parametre this değeri olacaktır. Yani, aramanız için this$data olacaktır ve ilk argüman $parent olacaktır.

$root o zaman tıpkı olabilir bu durumda $parent geçerli:

$root.deleteSomeEntity.bind($root)

KO ilk parametre olarak veri geçecek ve this$root ayarlanacaktır. $parent Eğer

$root değil (ve muhtemelen root üzerinde yöntemde $root farklı bir nesne olmaktan this güvenmek istemiyorum), o zaman böyle bir şey yapsın:

$root.deleteSomeEntity.bind($root, $data, $parent)

Aksi takdirde, görünüm modelinizde uygun this olduğundan emin olmanın yolları vardır. Yapınıza bağlı olsa da.

+0

:

http://knockoutjs.com/documentation/click-binding.html sadece bu yapabilecekken

Neden bind() ile rahatsız (1 & Not 2) http://jsfiddle.net/6MmWs/5/ ancak zaman Delete ve 'self.deleteContactPhone = işlevini (viewModel, telefon, iletişim)' seçeneğini tıklatarak viewModel bir telefondur, telefon bir kişidir ve kişi de bir telefondur. Bu şu anda görüntü modelidir. – kendaleiv

+1

Daha çok istersiniz: http://jsfiddle.net/rniemeyer/6MmWs/6/. Bahsetmek için birkaç şey. "remove", bir gözlemlenebilirArray'da bulunan bir işlevdir. Telefonlarınızın dizilerinizi gözlemlenebilir olarak değiştirdim, böylece kaldırıldığında "kaldırma" ve kullanıcı arayüzü güncellemeleriniz var. –

+0

Diğer bir şey, fonksiyon imzanızın sadece '' 'fonksiyonu (telefon, iletişim)' olmasını istemeniz. "Bind" işlevinin ilk parametresi, işleviniz çalışırken "this" değerini kontrol etmek için kullanılan hedeftir. Yani, aslında işlevin bir argümanı değildir. –

2

Neden bind() kullanıyorsunuz? Varsayılan olarak, javascript işlevinin adını tıklatma olayı olarak yazacak olursanız, Knockout ilk argüman olarak $data'u ve olayı ikinci olarak geçirecektir. Önerileriniz ardından

data-bind="click: function() {$root.deleteSomeEntity($data, $parent)}" 
+0

Bu kod beni tıklamadan yürütülecek gibi görünüyor. Eğer bir şey değişirse, bir data-bind = "foreach: ..." içinde. – kendaleiv

+0

Elbette öyle! Maalesef kodu düzenledim, böylece bir 'function()' tıklama bağının etrafına sarıldı. Bu şimdi beklendiği gibi çalışmalıdır. – soniiic

+1

Bu sadece bir stil şey. Birçok kişi, işaretlerinde isimsiz işlevlerin kullanılmasını sevmez. Bu, özellikle de daha göze batmayan bir yaklaşıma alışkın olduklarında, KO'ya başladıklarında insanları söndüren şeylerden biri. Her iki şekilde de iyi çalışır, ancak 'bu' görünüm modelinin kendisinde uygun şekilde ayarlandığından emin olmayı tercih ederim. –