2013-05-22 3 views
2

Обновление: Я добавил a jsFiddle моей проблемы. Я также полностью переписал вопрос, поскольку идеи изменились.Почему мое значение knockout.js не сохраняется?

У меня есть страница, где я использую knockout.js для макета. У меня это успешно работает на другой странице в моем приложении, но я не могу заставить это работать. Моя модель состоит из родительской записи и ее дочерних записей. Моя проблема заключается в том, когда я пытаюсь сделать копию предыдущей строки, чтобы пользователь мог добавлять много похожих записей. Когда я ввожу значения в поля «Мой», «Проект», «Работа» и «Комментарии», значения остаются пустыми в модели, поэтому, когда я отправляюсь копировать эти поля, они остаются пустыми. =. Есть идеи? Я предполагаю, что мне не хватает чего-то глупого.

function DayViewModel(day) { 
    var self = this; 

    self.Date = day.Date; 
    self.Time = day.Time; 
    self.Hours = ko.observable(day.Hours); 
    self.TimesheetCode = ko.observable(day.TimesheetCode); 
    self.Department = ko.observable(day.Department); 
    self.Project = ko.observable(day.Project); 
    self.Job = ko.observable(day.Job); 
    self.Comments = ko.observable(day.Comments); 
    self.JobIsRequired = ko.observable((day.JobIsRequired == undefined) ? false : day.JobIsRequired); 
} 

function RequestViewModel() { 
    var self = this; 

    self.DaysRequested = ko.observableArray([new DayViewModel({ 
     Date: new Date().toString("MM/dd/yyyy"), 
     Time: "08:00 AM", 
     Hours: 1, 
     TimesheetCode: "", 
     Department: 0, 
     Project: 0, 
     Job: 0, 
     Comments: "" 
    })]); 
    self.timesheetCodes // gets data from an external data source 

    // Add another day copying the previous day. 
    self.addDay = function() { 
     var array = self.DaysRequested(); 
     var previousDay = array[array.length - 1]; 
     previousDay.Date = Date.parse(previousDay.Date).addDays(1).toString("MM/dd/yyyy"); 

     var test = ko.utils.unwrapObservable(previousDay.Department); 

     var newDay = new DayViewModel({ 
      Date: previousDay.Date.toString("MM/dd/yyyy"), 
      Time: previousDay.Time, 
      Hours: ko.utils.unwrapObservable(previousDay.Hours), 
      Department: ko.utils.unwrapObservable(previousDay.Department), 
      Project: ko.utils.unwrapObservable(previousDay.Project), 
      Job: ko.utils.unwrapObservable(previousDay.Job), 
      Comments: ko.utils.unwrapObservable(previousDay.Comments), 
      TimesheetCode: ko.utils.unwrapObservable(previousDay.TimesheetCode) 
     }); 
     self.DaysRequested.push(newDay); 
    } 
} 
+0

Можете ли вы создать JSFiddle, http://jsfiddle.net, с помощью HTML, JS и CSS, чтобы мы могли отладить вашу проблему? – nickytonline

+0

Итак, что сломано? Можете ли вы описать, что делает пользователь, что вы ожидаете, и что на самом деле происходит? Все, что мы знаем, это «Значение нокаута не сохранено» и «он не работает». Можете ли вы уточнить, что не работает? – CodeThug

+0

@CodeThug Извините, я, должно быть, отвлекся и забыл добавить то, что было не так. –

ответ

1

Вы используете привязку текста к некоторым вашим полям, когда вам нужно привязать значение. Например, Департамент должен быть

<input type="text" class="input-small department-entry" max="5" data-bind="value: Department, uniqueName: true" /> 
+0

@ Майк Уиллис - у этой скрипки все еще есть привязка текста. Вам также не нужна скобка в привязке. Попробуйте это: http://jsfiddle.net/SPqjm/4/ –

+0

Я вижу, что я сделал неправильно сейчас. Как я сказал ... что-то глупое. Благодаря! –

0

Кроме вашего наблюдаемого массива, единственное, что у вас есть, - это TimesheetCode. Из ко documentation:

An observableArray треков, какие объекты находятся в массиве, а не состояние этих объектов

Я предполагаю, что вы связали Дата, время, часы, и т. д., чтобы вводить поля на вашей странице и ожидают обновления, которые пользователь вводит в эти поля ввода, которые будут отображаться в базовых объектах javascript, но они не являются, поэтому значение «Knockout» не сохраняется ».

Если это так, то я бы рекомендовал создать дату, время, часы и т. Д. В качестве наблюдаемых.

Если вам нужно более подробное решение, предоставьте более подробную информацию, включая соответствующую разметку.

+0

Дата и время и отлично работает. Это другие поля, которые не работают. Что делает этого незнакомца. –

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