使用Knockout.js绑定问题?

时间:2014-04-01 04:01:58

标签: javascript knockout.js

api使用Knockout.js。我想动态绑定下拉列表。这是我用于淘汰赛的代码

function LeadModel() {

        var that = this;
        that.Saleslist = ko.observableArray("") //Sales list is my model



    }

    function SalesEmpNm() {

        var that = this;
        that.LeadModel = new LeadModel();
        that.reset = function () {

            that.LeadModel.Salesid("");
            that.LeadModel.SalesNme("");
        };
        that.submit = function () {

            var json1 = ko.toJSON(that.LeadModel);
            $.ajax({
                url: '/api/values',
                type: 'GET',
                dataType: 'json',
                data: json1,
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    var message = data.Message;
                }
            });
        };
    };
    var _vm = new SalesEmpNm();
    $(function () {
        ko.applyBindings(_vm);
    });

这是我的文字

销售名称:

<select id="ddlSales" name="ddlSales" 
        data-bind="options:$root.LeadModel.Saleslist, Value:'Salesid', 
          Text:'SalesNme', Value:LeadModel.Salesid">
            </select>

请求建议我动态绑定下拉列表的答案。 谢谢&amp;此致

3 个答案:

答案 0 :(得分:2)

我无法看到您在哪里填充Saleslist数组。 但是,以下情况适用于您的情况:

<select id="ddlSales" name="ddlSales"
data-bind='optionsCaption: "[Please Select]", options: _vm.LeadModel.Saleslist(), optionsText: "SalesNme", optionsValue: "Salesid"'></select>

请注意,我正在绑定像_vm.LeadModel.Saleslist()

这样的数组

您的模型中的另一个问题是LeadModel没有您在Salesid函数中访问的SalesNmereset属性:

that.reset = function () {
    that.LeadModel.Salesid("");
    that.LeadModel.SalesNme("");
};

答案 1 :(得分:0)

问题可能是您正在使用空字符ko.observableArray("")初始化"",但不支持此字符串ko.observableArray()。您可能只需要将其更改为Salesid

但正如@Ahsan所说,您粘贴的代码中可能还有其他问题,例如未定义的SalesNmesuccess,而您的Saleslist处理程序并未填充正如我所预料的那样{{1}}。

答案 2 :(得分:0)

也许问题是因为您没有在Saleslist中提供任何值。

这可以解决这个问题:

this.Saleslist = ko.observableArray([
    { Salesid: 1, SalesNme: "One" },
    { Salesid: 2, SalesNme: "Two" }
});