我在viewmodel中定义一个函数时遇到了问题。
我通过jquery getJSON获取json数据并将此数据映射到我的viewmodel。
$.getJSON('/Company/GetCompanies', function(data) {
var viewModel = new CompanyViewModel()
viewModel.model = ko.mapping.fromJS(data)
ko.applyBindings(viewModel)
});
下面是我的viewmodel。你可以看到我想要做的是,通过名为companyName
的函数返回viewmodel的一个属性
var CompanyViewModel = function() {
var self = this;
self.companyName = function()
return model.CompanyName;
};
}
然后我想使用像<span data-bind="text: companyName" />
这样的函数但是,JavaScript函数不会被评估并作为文本返回。
我在网上浏览了Knockout的例子,但所有这些都使用了计算的可观察量。
有没有办法实现这个目标?感谢。
答案 0 :(得分: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)
});
答案 1 :(得分: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"},...];
并且你里面只有一家公司。