2

我在视图模型中定义函数时遇到问题。

我通过 jquery getJSON 获取 json 数据并将这些数据映射到我的视图模型。

$.getJSON('/Company/GetCompanies', function(data) { 
    var viewModel = new CompanyViewModel()
    viewModel.model = ko.mapping.fromJS(data)
    ko.applyBindings(viewModel)
});

下面是我的视图模型。如您所见,我想要做的是,通过调用的函数返回 viewmodel 的属性之一companyName

var CompanyViewModel = function() {
    var self = this;

    self.companyName = function()
         return model.CompanyName; 
    };
}

然后我想使用这个函数,<span data-bind="text: companyName" />但是,JavaScript 函数不会被评估并作为文本返回。

我浏览了网络上的 Knockout 示例,但它们都使用了计算的 observables。

有没有办法做到这一点?谢谢。

4

2 回答 2

4

尝试这个:

var CompanyViewModel = function(data) {
    ko.mapping.fromJS(data, {}, this); 
};

CompanyViewModel.prototype.fileTaxes = function() {
    console.log("Company is filing taxes.");
};

$.getJSON('/Company/GetCompanies', function(data) { 

    // data would look something like this: 
    // data: { companyName : "MicroStrategy",
    //         founderName : "etc" }
    var viewModel = new CompanyViewModel(data);
    ko.applyBindings(viewModel)
});
于 2012-07-05T18:54:54.707 回答
1

我做了一些测试,这对我有用:

return self.model()[0].CompanyName;

并调用它:data-bind="text: companyName()"

编辑:

       var CompanyViewModel = function() {
            var self = this;

            self.companyName = function(){

                 return self.model()[0].CompanyName; 
            };
        }

        $.getJSON('/Company/GetCompanies', function(data) { 
            var viewModel = new CompanyViewModel();
            viewModel.model = ko.mapping.fromJS(data);
            ko.applyBindings(viewModel);
        });

假设您的 JSON 数据以如下格式返回,则此方法有效:

[{"CompanyName":"Stack","SomeOtherField":"SomeOtherValue"},...];

而且你里面只有一家公司。

于 2012-07-05T15:16:18.690 回答