0

我查看了 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);
4

1 回答 1

2

Breeze 在两种情况下进行元数据调用,或者作为应用程序中第一个查询的一部分隐式调用,或者通过 EntityManager.fetchMetadata 方法显式调用。这意味着,如果您没有将查询作为您的第一个操作,那么您将需要进行“fetchMetadata”调用。请记住,这是一个返回“promise”的异步调用,就像查询一样,因此当promise 解决时(即在“then”调用中),您将需要执行对“createEntity”方法的任何调用。

于 2013-04-16T17:52:07.393 回答