2013-07-11 2 views
1

Я работаю над веб-проектом, и мы хотим попытаться использовать KnockoutJS. Для начала, я построить мое приложение с Chrome (дело на чиновника, Нокаут, кажется, работает с IE8), но когда я пытаюсь мой веб-приложения в IE8, я получил много исключений:Проблемы с нокаутом с привязками IE8

HTML:

<ul class="nav nav-tabs" id="tabs" data-bind="foreach: items"> 
    <li data-bind="'id': 'id', css: { active: 'id' == $parent.selectedTab().id }, 'click': $parent.changeTab"> 
     <a data-toggle="tab" data-bind="text: name, attr: { 'href': 'href' }"></a> 
    </li> 
</ul> 

JS:

var tabs = [ 
    new TabViewModel(1, "Tab 1", true), 
    new TabViewModel(2, "Tab 2", true), 
    new TabViewModel(3, "Tab 3", false), 
]; 

function TabViewModel(id, name, enabled) { 
    var self = this; 

    self.id = ko.observable("test" + id); 
    self.name = name; 
    self.paneId = "tab" + id; 
    self.href = ko.observable("#tab" + id); 
    self.displayId = "header_tab" + id; 
    self.enabled = ko.observable(enabled); 

    ko.bindingHandlers.changeStates = { 
     init: function (element, valueAccessor) { 
      var enable = valueAccessor(); 
      if (enable) { 
       $(element).removeClass("disabled"); 
      } else { 
       $(element).addClass("disabled"); 
      } 
     }, 
     update: function (element, valueAccessor) { 
      var enable = valueAccessor(); 
      if (enable) { 
       $(element).removeClass("disabled"); 
      } else { 
       $(element).addClass("disabled"); 
      } 
     } 
    } 
} 

function SurveyViewModel(tabs) { 
    var self = this; 

    self.items = ko.observableArray(tabs); 
    self.selectedTab = ko.observable(self.items()[0]); 
    self.changeTab = function (tab) { 
     if (tab.enabled()) 
      self.selectedTab(tab); 

     return true; 
    }; 
} 

ko.applyBindings(new SurveyViewModel(tabs)); 

у меня есть вопросы:

  • 2 линии, вбрасывания исключением 'changesStates': Unable to parse bindings. Message: TypeError: Object expected; Bindings value
  • 3 белье с HREF собственности:

Заранее спасибо

+0

Каковы кавычки вокруг ваших свойств в вашем атрибуте привязки данных? – CodingIntrigue

+0

Знаете ли вы, что для привязки значения к атрибуту id вы должны использовать привязку attr? –

+0

Какую версию нокаута вы используете? Я не вижу ошибок в IE8. См. Http://jsfiddle.net/DoctorMick/PNc9P/ – DoctorMick

ответ

6

Я довольно уверен, что это:

var tabs = [ 
    new TabViewModel(1, "Tab 1", true), 
    new TabViewModel(2, "Tab 2", true), 
    new TabViewModel(3, "Tab 3", false), 
]; 

У вас есть лишняя запятая в конце. IE не очень умный, поэтому он думает, что вы должны иметь 4-й элемент в массиве, который был нулевым.

+0

Это объясняет проблему IE7, а не IE8. – Adam

+0

Я думаю, что проблема существует и в IE8. Несколько вопросов упоминают это, в том числе [этот] (http://stackoverflow.com/questions/7246618/trailing-commas-in-javascript). – woz

+0

Спасибо, это было ваше решение ... Мне так стыдно. –

Смежные вопросы