2012-04-17 115 views
1

我從knockoutjs得到下面的錯誤。它清楚地知道AreaNames大部分時間是什麼,因爲UI顯示AreaNames正在顯示,但是在某個時候JavaScript會因錯誤而凍結。knockoutjs無法解析綁定

Uncaught Error: Unable to parse bindings. 
Message: TypeError: Object #<Object> has no method 'AreaNames'; 
Bindings value: foreach: ActiveDay().AreaNames() 

相關代碼:

<ul data-bind="foreach: ActiveDay().AreaNames()"> 
    <li data-bind="text: $data"></li> 
</ul> 

var scheduleModel = function (shiftCellToggle) { 
    var vm = this; 
    vm.ActiveDay = ko.observable({ AvailableShiftCategories: [] }); 
    vm.CustomMapping = { 
     'Weeks': { 
      create: function (options) { 
       var week = new scheduleWeekModel(vm, shiftCellToggle); 
       ko.mapping.fromJS(options.data, week.CustomMapping, week); 
       return week; 
      } 
     } 
    }; 
} 

    var scheduleWeekModel = function (scheduleModel, shiftCellToggle) { 
     var vm = this; 
     vm.CustomMapping = { 
      'Days': { 
       create: function (options) { 
        var day = new scheduleDayModel(scheduleModel, shiftCellToggle); 
        ko.mapping.fromJS(options.data, day.CustomMapping, day); 
        return day; 
       } 
      } 
     }; 
    var scheduleDayModel = function (scheduleModel, shiftCellToggle) { 
     var vm = this; 
     vm.CustomMapping = { 
      'AvailableShiftCategories': { 
       create: function (options) { 
        var availableShiftCategory = new availableShiftCategoryModel(scheduleModel, vm, shiftCellToggle); 
        ko.mapping.fromJS(options.data, availableShiftCategory.CustomMapping, availableShiftCategory); 
        return availableShiftCategory; 
       } 
      } 
     }; 

     vm.AreaNames = ko.observableArray([]); 

var viewModel = new scheduleModel(createShiftToggle()); 
ko.applyBindings(viewModel); 
+0

代碼不完整,scheduleWeekModel和scheduleDayModel的括號不匹配。 createShiftToggle做什麼?這裏是你的代碼http://jsfiddle.net/madcapnmckay/8nyB7/ jsfiddle,也許你可以更新,以演示你的問題。 – madcapnmckay 2012-04-18 05:39:37

+0

您不需要數據綁定屬性中的父項。 – Tyrsius 2012-05-01 00:31:44

回答

0

你的代碼顯示AreaNames被稱爲虛擬機中對象。但是你的約束意味着AreaNames是對象ActiveDay的一部分。這從您提供的代碼中沒有意義。我們需要看到更多的代碼。

vm是什麼?它是如何綁定的?這是傳遞給applyBindings的對象嗎?

我的第一個想法是,假設ActiveDay是您的根虛擬機上的一個屬性,它在某個時間點將被取消分配,這會以您描述的方式破壞綁定。

希望這會有所幫助。

我發現這個普遍問題
1

最好的解決辦法是在GC:https://groups.google.com/d/msg/knockoutjs/oTVkPnNxF84/mK1FIrAaOqoJ

輸出劫對象作爲你的HTML JSON字符串。這是一種粗糙而有效的工具來了解正在發生的事情。就我而言,我發現在特定的dom元素變爲啓用後,後期綁定是消除這種類型錯誤的特定問題的關鍵。請嘗試在GC組上描述的解決方案。