2013-07-04 2 views
0

Мне нужно создать внешнюю переменную (массив), которая содержит данные, полученные от объекта Json. этот массив данных будет использоваться для привязки поля со списком.Как добавить значения к внешнему var в knockoutjs

, что я попробовал: -

var data = [ 
    $.ajax({ 
     type: "POST", 
     url: 'TimeRecord.aspx/ReturnComplexType', 
     data: {}, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (arg) { 
      alert('hello Inside new'); 
      for (var i = 0; i < arg.d.length ; i++) { 
       "projectCode"=arg.d[i].ProjectCode 
       //data.push(arg.d[i].ProjectCode) 

      } 

     }, 
     error: function (arg) { 
     } 
    }) 
]; 

HTML код:

<td><select id="Select2" data-bind='options: data, value: selectedProject' style="width: 312px"></select> 

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

Edit: мой полный другой код

function ViewModel() { 
    var self = this; 
    this.CheckIn = ko.observable(); 
    this.CheckOut = ko.observable(); 
    this.Lunch = ko.observable(); 
    this.projectLine = ko.observableArray([new projectsWorked()]); 

    this.TimeForWork = ko.computed(function() { 
     return this.CheckIn() ? this.CheckOut() ? parseFloat(this.Lunch()) ? parseFloat(this.CheckOut()) - parseFloat(this.CheckIn()) - parseFloat(this.Lunch()) : parseFloat(this.CheckOut()) - parseFloat(this.CheckIn()) : 0 : 0; 
    }, this); 

    this.Rest = ko.observable(); 

    this.RemainHour = ko.computed(function() { 
     return self.TimeForWork() ? self.Rest() ? self.WorkOnProject() ? parseFloat(self.TimeForWork()) - parseFloat(self.Rest()) - parseFloat(self.WorkOnProject()) : parseFloat(self.TimeForWork()) - parseFloat(self.Rest()) : parseFloat(self.TimeForWork()) : 0 
    }, this); 

    this.WorkOnProject = ko.observable(); 
    this.grandTotal = ko.observable(); 

    this.AddLine = function() { 
     alert('hello Add'); 
     // alert(this.grandTotal()); 
     this.calcTotal(); 
     this.projectLine.push(new projectsWorked()); 
    }; 

    this.removeLine = function (line) { 
     alert('hello Remove'); 
     self.projectLine.removeLine;  
    }; 
}; 

function projectsWorked() { 
    var self = this; 
    this.projectEnable = ko.observable(false); 
    this.hours = ko.observable(); 
    this.selectedProject = ko.observable(); 

}; 

ko.applyBindings(new ViewModel()); 
+0

Где зов к применению? Вы должны привязать источник данных к своим элементам. – TGH

+0

@TGH я обновил свой вопрос – DevT

ответ

1

Данные, которые вы заполняете должны быть observableArray. После получения данных вы должны установить его. В вашем ViewModel вы можете иметь этот наблюдаемый массив, а тег options должен привязываться к нему. You код должен выглядеть примерно так:

В вашей ViewModel а как, как:

optionsData = ko.ObservableArray; 
... 
// later you should make your ajax call and fill optionsData observable 

и ваш взгляд должны измениться, чтобы связываться с optionsData:

data-bind='options: optionsData 

Создание глобальных переменных, чтобы сделать эти привязки не является хорошим решением.

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