2013-04-16 35 views
0

我看着Chrome上的網絡標籤,發現我的元數據微風API沒有被調用,因此我所有的createEntity等方法都失敗了。微風元數據Api沒有被調用

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

我都跟着待辦事項例子並啓用CORS支持和剛纔的一切,我可以看到JSON元數據,如果我瀏覽到/ API /微風/元 我使用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); 

回答

2

微風使兩種條件下的元數據呼叫,隱含在經由EntityManager.fetchMetadata方法的應用程序或顯式的第一查詢的一部分。這意味着如果您是而不是將執行查詢作爲您的第一個操作,那麼您需要改爲執行「fetchMetadata」調用。請記住,這是一個異步調用,與查詢一樣返回'承諾',因此,當承諾解決時(即在'然後'調用中),您需要對您的「createEntity」方法執行任何調用。