2014-12-05 49 views
0

我一直在經歷創建畫廊的mobilegap劍術教程,並獲得到這種地步它告訴我,通過kendo.observable爲什麼不使用簡單的jquery事件而不是kendo window.observable?

專門指派一些事件,有一個簡單的照片列表視圖和代碼應該看這樣

window.listview = kendo.observable({ 
    addImage: function() { 
    ...do stuff... 
    } 
}); 

然後上的按鈕,我們添加此屬性data-bind="click:addImage"

OK,這個工程。但我絕對不爲什麼已瞭解這是必要的,因爲我可以簡單地做

$("button").click(function(){ 
    ...do stuff... 
} 

爲什麼會勸獲取通過kendo.observable事件?爲什麼它甚至需要分配給window.listview?

如果我有一個通用的應用程序,而不是照片列表視圖?

我在這裏

回答

2

缺少點在你的具體的例子,是不是真的有一個偉大的理由使用了另一種,也許除了一致性。然而,我可以想到Kendo的綁定事件優於jQuery的一些好的情況:

  1. 綁定按鈕通常是上下文感知的。如果您的按鈕綁定到集合中的特定項目,則數據綁定函數將在單擊時傳遞該項目的數據。像添加到每個項目在列表視圖刪除按鈕:

〔實施例:

var viewModel = kendo.observable({ 
    // vm stuff... 
    DeleteMe: function(e) { 
     this.someDataSource.remove(e.data); 
    } 
} 

VS

// vm stuff... 

$('.delete-button').on('click', function(e) { 
    var myId = $(this).parent().data('uid'); // Assuming the delete button's parent is the list item... 
    var data = viewModel.someDataSource.getByUid(myId); 
    viewModel.someDataSource.remove(data); 
}) 
  • 動態生成的項目。在上面的示例中,如果我們向集合添加了新項目,則需要再次將事件分配給所有新按鈕。但是,在模板中使用數據綁定事件時,每當創建新項目時都會自動創建它們。

  • 遠程數據訪問和其他異步操作。如果listview被綁定到一個遠程數據源,所有帶按鈕的項目可能不會在上面的jQuery代碼運行時創建。在分配事件偵聽器之前,您需要使用更多事件(如DataSource更改)來等待所有數據加載。同樣,模板綁定函數自動處理它。

  • 當然,最終都歸結爲偏好。如果你更習慣於使用jQuery,那麼一定要用它。我傾向於使用任何方法來構建最簡潔,可讀和無缺陷的代碼。由於我的C#背景,MVVM的東西對我來說也更自然,但即使如此,我發現自己有時會混合這兩種背景。

    爲了回答您的其他問題:

    window.listview = something; 
    

    幾乎是一樣的

    var listview = something; 
    

    如果你是在正確的範圍內。

    所有MVVM的東西在數據驅動的應用程序中更有用,而不僅僅是一個照片查看器。

    相關問題