我用durandal写温泉网站。在我使用widget之前,每件事都没问题。小部件不会更新我的模型。
我的小部件视图模型:
define([], function () {
var ctor = function () {
};
ctor.prototype.activate = function (settings) {
this.settings = settings;
};
ctor.prototype.attached = function () {
$('.datepicker').datepicker({
clearBtn: true,
todayBtn: true,
});
};
return ctor;
})
我的小部件视图:
<div >
<input class="datepicker" data-bind="value: settings.datevalue"/>
</div>
然后我将我的小部件更改为此,这是有效的。有更好的方法吗?
我的小部件视图模型:
define([], function () {
var ctor = function () {
};
ctor.prototype.activate = function (settings) {
this.settings = settings;
var data = settings.data;
var property = settings.property;
this.datevalue = ko.computed({
read: function() {
return data[property];
},
write: function(value) {
data[property] = value;
}
});
};
ctor.prototype.attached = function () {
$('.datepicker').datepicker({
clearBtn: true,
todayBtn: true,
});
};
return ctor;
})
我的小部件视图:
<div >
<input class="datepicker" data-bind="value: datevalue"/>
</div>
我的观点模型:
define(['services/datacontext'],
function (datacontext) {
var myViewModel = ko.observable();
var activate = function (id) {
if (id) {
datacontext.load(id).done(function (result) {
myViewModel (result);
});
}
return {
activate: activate,
myViewModel: myViewModel
}
});
我的观点:
<section data-bind="with: myViewModel">
<address>
<label for="code">Code:</label>
<input data-bind="value: code" />
</address>
<div>
<label for="expireDate">Expire Date :</label>
<span id="expireDate" data-bind="datepicker: { data: $data, prop:'expireDate'}"/>
</div>
ko.mapping.fromJS解决了我的问题并且不需要这个改变。