2013-12-16 2 views
0

Это должен быть довольно тривиальный вопрос, но это сходит с ума! I't как шаг 1 учебника, но я не могу его работать .... так что это мой код:Невозможно добавить товар в наблюдаемыйArray

/* Model definition */ 
    var PrivateSalesMenuModel = function() { 
    var self = this; 
    this.privateSales = ko.observableArray(); 
    this.addPrivateSale = function (privateSale) { 
     var newPs = new PrivateSaleMenuItem(privateSale); 
     self.privateSales.push(newPs); 
    }; 
}; 

var PrivateSaleMenuItem = function (ps) { 
    this.title = ps.Description; 
    this.hasActual = ps.HasActual; 
    this.hasSale = ps.HasSale; 
    this.listaId = ps.ListaId; 
    this.isSelected = false; 
}; 
/* end model definition*/ 

var privateSalesMenuModel = new PrivateSalesMenuModel(); 

ko.applyBindings(privateSalesMenuModel); 

Довольно просто ... У меня есть объект, который представляет мою модель, это набор других объектов, называемый PrivateSaleMenuItem. Проблема в том, что addPrivateSale не работал должным образом. Где-то в коде я

privateSalesMenuModel.addPrivateSale(ps); 

где пс является объектом, созданным другими функциями JavaScript ... в любом случае является exactaly объект мне нужно в конструкторе PrivateSaleMenuItem, так что последовательность не проблема. Проблема в том, что self.privateSales.push(newPs); не работает ... после этого, число privateSalesMenuModel.privateSales по-прежнему 0. Почему?

Отредактировано

Я положил toghether примера в jsFiddle с этим точно таким же кодом, и она отлично работает, так что я подозреваю, что-то в моей странице сделать толчок метод observableArray перестать работать ... как я могу узнать, что это такое?

опс ... звено jsfiddle http://jsfiddle.net/YBHf5/

+0

У вас есть какие-либо ошибки в консоли? – Tanner

+0

'ko.observableArray()' определяется? ... функция возвращает правильный массив? метод доступен? – Frogmouth

+0

@ Таннер: нет, все чисто. – themarcuz

ответ

0

Проблема решена .... Это была пустяковая проблема, с тривиальным решением: мне просто нужно было нажать объявление внешнего сценария в конце страницы. У меня был сценарий (в котором присутствует код, указанный в вопросе) в верхней части страницы, внутри тела, но выше всего остального. Просто поместите ссылку на сценарий в конце тела, и все снова будет работать так, как ожидалось. Извините за то, что тратил свое время ... но эту небольшую проблему очень сложно выяснить, потому что причина не совсем понятна при отладке

1

Похоже, что вы смешиваете это и сам в своем коде здесь:

var PrivateSalesMenuModel = function() { 
    var self = this; 
    this.privateSales = ko.observableArray(); 
    this.addPrivateSale = function (privateSale) { 
     var newPs = new PrivateSaleMenuItem(privateSale); 
     self.privateSales.push(newPs); 
    }; 
}; 

Изменение их все использовать самостоятельно фиксирует это следующим образом:

var PrivateSalesMenuModel = function() { 
    var self = this; 
    self.privateSales = ko.observableArray(); 
    self.addPrivateSale = function (privateSale) { 
     var newPs = new PrivateSaleMenuItem(privateSale); 
     self.privateSales.push(newPs); 
    }; 
}; 

Пожалуйста, смотрите работать скрипку здесь:

http://jsfiddle.net/YBHf5/1/

+0

Я уже пробовал это, но на моей настоящей странице это не работает ... – themarcuz

+0

Длинный снимок, но есть ли у вас внешняя ссылка? Я могу просмотреть его? – hutchonoid

+0

Слишком плохо, что у меня нет ... – themarcuz

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