Javascript breeze/durandal:configureBreezeManager().saveChanges()不';t触发器功能已更改更改
我一直在按照Hottowl的例子创建一个网站。但是,调用Javascript breeze/durandal:configureBreezeManager().saveChanges()不';t触发器功能已更改更改,javascript,breeze,durandal,hottowel,Javascript,Breeze,Durandal,Hottowel,我一直在按照Hottowl的例子创建一个网站。但是,调用saveChanges后,hasChanges的值不会更改,甚至数据实际上也保存在数据库表中。我使用热毛巾durandal 2.0.1。我发现durandal版本与CCJS Scratch示例不同。我错过什么了吗 datacontext.js var manager = configureBreezeManager(); var hasChanges = ko.observable(false); manager.
saveChanges
后,hasChanges
的值不会更改,甚至数据实际上也保存在数据库表中。我使用热毛巾durandal 2.0.1。我发现durandal版本与CCJS Scratch示例不同。我错过什么了吗
datacontext.js
var manager = configureBreezeManager();
var hasChanges = ko.observable(false);
manager.hasChangesChanged.subscribe(function (eventArgs) {
hasChanges(eventArgs.hasChanges); // The function isn't called when saveChanges is called
});
var cancelChanges = function () {
manager.rejectChanges();
log('Canceled changes', null, true);
};
var saveChanges = function () {
return manager.saveChanges()
.then(saveSucceeded)
.fail(saveFailed);
function saveSucceeded(saveResult) {
log('Saved data successfully', saveResult, true);
}
function saveFailed(error) {
var msg = 'Save failed: ' + getErrorMessages(error);
logError(msg, error);
error.message = msg;
throw error;
}
};
视图模型中存在以下代码
var hasChanges = ko.computed(function () {
return datacontext.hasChanges();
});
var cancel = function () {
datacontext.cancelChanges();
};
var canSave = ko.computed(function () {
return hasChanges() && !isSaving();
});
var save = function () {
isSaving(true);
return datacontext.saveChanges().fin(complete);
function complete() {
isSaving(false);
}
};
也许你有时间问题?你有很多嵌套的观测值和计算的观测值,我在这么晚的时候很难对齐 我所知道的是Breeze DocCode:saveTodoTests.js显示在保存更改和还原时(
rejectChanges
)使用正确的eventArgs.hasChanges
值调用了HasChangesChanges
)。这里有一个来自该套件的通过测试来证实这一点
test("hasChangesChanged event raised after saveChanges", 4, function () {
var em = newTodosEm();
var hasChangesChangedRaised = [];
em.hasChangesChanged.subscribe(
function(eventArgs) {
hasChangesChangedRaised.push(eventArgs.hasChanges);
}
);
// add a Todo (and forget about it)
em.createEntity('TodoItem',{ Description: "Learn to save in breeze" });
stop();
em.saveChanges()
.then ( function() {
equal(hasChangesChangedRaised.length, 2,
"hasChangesChanged should have been raised twice");
ok(hasChangesChangedRaised[0]===true,
"first hasChangesChanged is true after create");
ok(hasChangesChangedRaised[1]===false,
"second hasChangesChanged is false after save");
ok(!em.hasChanges(),
"manager should not have pending changes after save");
})
.fail(handleSaveFailed)
.fin(start);
});
请注意,hasChangesChanged
事件在此测试中引发了两次
请再次尝试调试,并确保您正在查看的事件是在保存后引发的事件,而不是在其他操作期间引发的事件
还要注意KO事件的嵌套。比赛条件是可能的。代码与Johny Papa的Hottow CCJS Scratch示例中的代码几乎完全相同。
manager.rejectChanges()代码>将触发该函数。您的挑战是验证它。我已经提供了DocCode证明该函数按预期工作。我刚刚调试了我的HotTower CCJS Scratch示例副本(承认在v.1.4.1中很旧),它的行为符合预期。球在你的球场上提供一个失败的小样本。