如何在knockoutjs中为外部var添加值

how to add values to external var in knockoutjs

本文关键字:外部 var 添加 knockoutjs      更新时间:2023-09-26

我需要创建包含从Json对象接收的数据的外部变量(数组)。这个数据数组将用于绑定组合框。

我尝试过的:-

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>

在for循环中,我尝试了不同的方法来为这个var变量赋值。但是我不能把它绑起来。请帮忙。。。。。

编辑:我的完整其他代码

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());

要填充的数据必须是observableArray。在获得数据后,您应该对其进行设置。在你的ViewModel中,你可以有observableArray,并且options标签必须绑定到它

在您的ViewModel中类似:

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

并且您的视图必须更改才能绑定到选项数据:

data-bind='options: optionsData

让全局变量进行这些绑定不是一个好的解决方案。