0

私はAsp.NetWebAPIでBreeze.jsを使用して以下を実行しています。ODataプロトコルを使用してサービスにクエリを実行でき、応答でJSONデータを確認できますが、.then()および.fail()コールバックが起動しないため、ビューモデルがデータを取得することはありません。メタデータがないからですか?

/// <reference path="..\breeze.debug.js" />

(function (root) {
    var dataService = new breeze.DataService({
        serviceName: 'api/breezesample',
        hasServerMetadata: false
    });

    var altMs = new breeze.MetadataStore({
        namingConvention: breeze.NamingConvention.camelCase
    });

    var manager = new breeze.EntityManager({
        dataService: dataService,
        metadataStore: altMs
    });

    // define the viewmodel
    var vm = {
        todos: ko.observableArray(),
        includeDone: ko.observable(false),
        show: ko.observable(false)
    };

    // start fetching Todos
    getTodos();

    // re-query when "includeDone" checkbox changes
    //vm.includeDone.subscribe(getTodos);

    // bind view to the viewmodel
    ko.applyBindings(vm);

    /* Private functions */

    // get Todos asynchronously
    // returning a promise to wait for     
    function getTodos() {

        var query = breeze.entityModel.EntityQuery.from("todos");

        if (!vm.includeDone()) {
            query = query.where("IsDone", "==", false);
        }

        return manager
            .executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);
    };

    function querySucceeded(data) {
        vm.todos.removeAll();

        var todos = data.results;
        todos.forEach(function (todo) {
            vm.todos.push(todo);
        });

        vm.show(true); // show the view
    }

    function queryFailed(error) {
        alert("Query failed: " + error.message);
    }

}(window));
4

1 に答える 1

0

このコードを試してください。また、addEntityType メソッド呼び出しを使用して、メタデータを「altMs」に追加する必要があります。最新バージョンの Breeze v.0.78.x も入手してください。コード内の「breeze.entityModel」は不要になりました。

var DataService   = breeze.DataService;
var MetadataStore = breeze.MetadataStore;
var EntityManager = breeze.EntityManager;

var dataService = new DataService({
    serviceName: altServiceName,
    hasServerMetadata: false
});

var altMs = new MetadataStore({
    namingConvention: NamingConvention.camelCase
});

return new EntityManager({
    dataService: dataService,
    metadataStore: altMs
});
于 2012-12-20T06:53:36.773 に答える