我是 Durandal/breeze/knockout 的新手,并试图在项目中使用它们,但我很早就被卡住了。
目前我有一个单一的视图(#/household/new)来创建一个新的家庭。我从 api 中获取了微风元数据,然后运行 EntityManager.createEntity('Household'),这将返回一个我期望的家庭对象。
然后我设置 StreetAddress 属性的值并更新 ko.observable (vm.household(hse))。一旦视图显示 observable 就不起作用。我现在的视图模型非常简单,一个文本输入,一个 div。它们都有与 StreetAddress 属性的数据绑定,但它们都没有更新,也没有以我设置的默认值开始。
奇怪的是,在帮助我更接近解决方案的过程中,我没有遇到任何错误。我真的不知道我哪里错了。任何帮助都会非常好。下面是我尝试使用的代码。
新户观
<div>
<h3>New Household Details</h3>
<div data-bind="text: household.StreetAddress"></div>
<input type="text" data-bind="value: household.StreetAddress" />
</div>
新的家庭视图模型:
define(function (require) {
var router = require('durandal/plugins/router');
var mainDataservice = require('dataservices/mainDataservice');
var system = require('durandal/system');
var vm = {
router: router,
activate: activate,
household: ko.observable()
};
return vm;
function activate() {
return system.defer(function (dfd) {
var hse = mainDataservice.createHousehold();
hse.StreetAddress("1234 Main Street");
vm.household(hse);
dfd.resolve();
}).promise();
}
});
主数据服务
define(function (require) {
var serviceName = 'api/mainDataservice', // route to the Web Api controller
manager = new breeze.EntityManager(serviceName);
return {
manager: manager,
activate: function () {
//I call this manually at the start of the application
return manager.fetchMetadata();
},
createHousehold: function () {
return manager.createEntity('Household');
}
};
});
家庭实体框架模型
public partial class Household
{
[Key]
[Required]
[Display(Name = "Household ID")]
public int HouseholdID { get; set; }
[StringLength(50)]
[Display(Name = "Street Address")]
public string StreetAddress { get; set; }
[StringLength(50)]
[Display(Name = "City")]
public string City { get; set; }
[StringLength(2)]
[Display(Name = "State")]
public string State { get; set; }
[StringLength(10)]
[Display(Name = "Zipcode")]
public string Zipcode { get; set; }
}