1

メソッドを追加したいサーバーからオブジェクトの配列を取得しています。以下のサンプルでは、​​doAlert と呼びたいと思います。data-bind="click: doAlert" を使用して doAlert にバインドしようとすると、ノックアウトで例外がスローされます。関数を間違って追加していると思われるので、アドバイスをいただければ幸いです。ありがとう

   $(document).ready(function () {
    var url = GetUrl();
    $.getJSON(url, function (data) {

        var mapping = {   
            doAlert: function (options) {
                alert('test');    
            }
        }

        var viewModel = ko.mapping.fromJS(data, mapping);
        ko.applyBindings(viewModel);
    });
});


<ul data-bind="foreach: $data">
<li>
    <span data-bind="text: Title"></span>
    <div class="btn-group" style="display:inline">
        <a class="btn-small btn dropdown-toggle" data-toggle="dropdown" href="#">Action
                    <span class="caret"></span>
        </a>
        <ul class="dropdown-menu">
            <a data-bind="click: doAlert"><li>Edit</li></a>
            <a><li>Delete</li></a>
        </ul>
    </div>
</li>

4

1 に答える 1

2

このJsFiddle デモをチェックしてください

デモ用にviewModelを少し変更しましたが、htmlは同じままです。

マッピング内で create 関数を定義する必要があります。

// Fake Data for demonstration
var fakeData = [{
    "id": 1,
    "Title": "C++"},
{
    "id": 2,
    "Title": "Java"},
{
    "id": 3,
    "Title": "JavaScript"},
{
    "id": 4,
    "Title": "Scala"},
{
    "id": 5,
    "Title": "Python"}
];


function Model() {

var self = this;

// You are using foreach syntax so we need to define an observableArray
this.dataArray = ko.observableArray([]);

this.loadData = function() {   
    $.ajax({
        type: 'POST',
        url: '/echo/json/',
        data: {
            json: ko.toJSON(fakeData)
        },
        success: function(data) {

            var mapping = {

                create: function(options) {                  
                    options.data.doAlert = function() {
                        alert(options.data.Title);
                    }
                    return options.data;
                }
            }
            // Map returning object into the our dataArray
            ko.mapping.fromJS(data, mapping, self.dataArray);
        },
        dataType: 'json'
    });
}
}
};

var viewModel = new Model();
ko.applyBindings(viewModel);
viewModel.loadData();​

create 関数に渡される Options パラメータには、いくつかのプロパティがあります。options.data プロパティを使用してデータにアクセスできます。options パラメータの詳細については、マッピング ドキュメントを参照してください。

于 2012-08-30T10:49:26.287 に答える