Breeze元数据Api没有被调用

时间:2013-04-16 14:56:57

标签: asp.net-mvc breeze

我查看了Chrome上的网络标签,发现我的元数据的微风api没有被调用,因此我的所有createEntity等方法都失败了。

      [HttpGet]
    public string Metadata()
    {
        return _context.Metadata();
    }

我已经按照todo示例启用了CORS支持以及几乎所有内容,如果我导航到/ api / breeze / metadata,我可以看到json元数据 我正在使用VS2012 Web Express并通过nuget获得所有软件包 dataservice.js

    app.dataservice = (function (breeze) {

    var serviceName = 'api/breeze'; // route to the same origin Web Api controller   

    var manager = new breeze.EntityManager(serviceName);

    return {
    createTodo: createTodo,
    saveChanges: saveChanges

    };

    function createTodo(initialValues) {
    return manager.createEntity('BreezeItem', initialValues);
    }

    function saveChanges() {
    return manager.saveChanges()
        .then(function () { alert('good') })
       .fail(function () { alert('bad') })
    }



})(breeze);

index.html
`
    <!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"/>

    <title>Breeze Todos with KO</title>        
    </head>
    <body>
    <div id="applicationHost">
        <header>
        <h1>Breeze Todos</h1>
        <h2>with Knockout</h2>
        <form data-bind="submit: addItem">
            <input type="text" data-bind="value: newBreeze, valueUpdate: 'afterkeydown'" placeholder="What needs to be done?">
        </form>
        </header>
    </div>

    <!-- 3rd party libraries -->
    <script src="Scripts/jquery-1.8.3.js"></script>
    <script src="Scripts/knockout-2.2.1.debug.js"></script>
    <script src="Scripts/q.js"></script>
    <script src="Scripts/breeze.debug.js"></script>        
    <script src="Scripts/breeze.savequeuing.js"></script>        

    <!-- App libraries -->
    <script>app = {};</script>        
    <script src="app/dataservice.js"></script>
    <script src="app/viewModel.js"></script>
    </body>
</html>

viewmodel.js
app.viewModel = (function ( dataservice) {

    var vm = {
    newBreeze: ko.observable(""),    
    addItem: addItem    
    };


    return vm; // done with setup; return module variable

    //#region private functions

    function addItem() {
    var item = dataservice.createTodo(
        {
        BreezeName: vm.newBreeze()
        }
    );

    dataservice.saveChanges().fail(addFailed);

    vm.newTodo("");

    function addFailed() {
        console.log("Failed")
    }
    }
    function extendItem(item) {
    if (item.isEditing) return; // already extended

    item.isEditing = ko.observable(false);        

    }


})(app.dataservice);

// Bind viewModel to view in index.html
ko.applyBindings(app.viewModel);

1 个答案:

答案 0 :(得分:2)

Breeze在两个条件下进行元数据调用,隐式地作为应用程序中第一个查询的一部分或通过EntityManager.fetchMetadata方法明确表示。这意味着,如果您执行查询作为第一个操作,那么您将需要进行“fetchMetadata”调用。请记住,这是一个异步调用,它返回一个'promise',就像查询一样,因此当promise解析时(即在'then'调用中,你需要对你的“createEntity”方法执行任何调用。