Jquery valueUpdate afterkeydown不使用可观察阵列

Jquery valueUpdate afterkeydown不使用可观察阵列,jquery,knockout.js,Jquery,Knockout.js,我正在做一个项目,用户可以添加或删除“资产”。资产存储在一个可观察的数组中,并在页面上显示为div。可以使用jQuery拖动每个资产DIV并调整其大小 我有4个文本输入,一个用于宽度、高度、顶部和左侧,与div大小和位置相关: 顶部: 左: 宽度: 高度: 文本输入绑定到数组中资产的值,并且在调整DIV的大小或移动DIV时,也通过JQuery更新数组: $(元素)。可拖动({ 拖动:函数(){ //在此处添加拖动更新 var position=$(this.position(); vie

我正在做一个项目,用户可以添加或删除“资产”。资产存储在一个可观察的数组中,并在页面上显示为div。可以使用jQuery拖动每个资产DIV并调整其大小

我有4个文本输入,一个用于宽度、高度、顶部和左侧,与div大小和位置相关:

顶部:

左:
宽度:
高度:
文本输入绑定到数组中资产的值,并且在调整DIV的大小或移动DIV时,也通过JQuery更新数组:

$(元素)。可拖动({
拖动:函数(){
//在此处添加拖动更新
var position=$(this.position();
viewModel.assets()[viewModel.selectedIndex()].top=position.top;
viewModel.assets()[viewModel.selectedIndex()].left=position.left;
}
}).可调整大小({
调整大小:函数(){
//在此处添加调整大小更新
viewModel.assets()[viewModel.selectedIndex()].width=$(this.width();
viewModel.assets()[viewModel.selectedIndex()].height=$(this.height();
}
})
一切正常,但是当用户更改文本框中的值时,我希望DIV立即更改。环顾四周后,我看到了许多使用valueUpdate属性的示例。我尝试过使用它(还有一些变体),但仍然只有在我单击DIV外的时候才更新DIV

我创建了一个JSFIDLE来显示我正在做什么,它不起作用:

(以下是一个我发现确实有效的例子,以及我正在努力实现的目标:)


我真的希望有人能向我解释我做错了什么

因为在创建新资产后,您将用普通值覆盖您的观察值:

self.addAsset = function(type, element, cssClass){
    var newAsset = new Asset();
    //newAsset.id = assetIdIncrement();
    newAsset.id(assetIdIncrement());
    ...

    self.assets.push(newAsset);
}
这将解决您的值不更新的问题

编辑:您也在自定义绑定中执行相同的操作:

//viewModel.assets()[viewModel.selectedIndex()].top = position.top;
viewModel.assets()[viewModel.selectedIndex()].top(position.top);

您的JSFIDLE示例正确吗?JSFIDLE显示了我当前的代码和问题。我试图理解为什么我的代码不能这样工作:太好了,谢谢!我必须对样式绑定做一个更多的更改,而不是data bind=“style{width:width+'px'…}”,我必须将其更改为data bind=“style{width:width()+'px'…}”没错。你可能还有其他类似的小“怪癖”四处游荡。你只要小心就行了。既然你已经向我解释了我做错了什么,我就要勇敢地小心,不要重蹈覆辙!再次感谢!