2

ビューモデル内で関数を定義する際に問題が発生します。

jquery getJSONを介してjsonデータをフェッチし、このデータをビューモデルにマップします。

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

以下は私のビューモデルです。ご覧のとおり、ビューモデルのプロパティの1つを次の関数で返します。companyName

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

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

次に、この関数を次のように使用し<span data-bind="text: companyName" />ます。ただし、JavaScript関数は評価されず、テキストとして返されません。

Webでのノックアウトの例を見ていきますが、それらはすべて計算されたオブザーバブルを使用しています。

これを達成する方法はありますか?ありがとう。

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"},...];

そして、その中には1つの会社しかないということです。

于 2012-07-05T15:16:18.690 に答える