[英]knockoutjs: custom data-bind 'with' to pass function by reference
[英]KnockoutJs: Pass data-bind values to javascript variable/object
我有点被淘汰赛弄糊涂了。 我已经阅读了大多数教程,并对如何使用它有一个大致的了解。 我可以很好地操作UI,但我不明白的是KO如何与KO之外的其他JavaScript函数进行通信。
我认为我的目标相当简单明了。 我需要用户从一系列单选按钮中选择的单选按钮的值。 这就是我所拥有的。
HTML
<input type="radio" name="templateStyle" value="DR.php" data-bind="checked: tempStyle">
<input type="radio" name="templateStyle" value="DRH.php" data-bind="checked: tempStyle">
<input type="radio" name="templateStyle" value="PS.php" data-bind="checked: tempStyle">
<p>The template style selected is <span data-bind="text: selectedStyle"></span></p>
<button id="submitTemplate">Submit Template</button>
JS
var radioValue = { rv: "" };
function viewModel() {
var self = this;
self.tempStyle = ko.observable("DR.php");
self.selectedStyle = ko.computed(function() {
return self.tempStyle();
},
self
);
return self.selectedStyle();
}
ko.applyBindings(new viewModel());
$("#submitTemplate").click(function() {
radioValue.rv = viewModel();
console.log(radioValue.rv);
});
这在UI端工作正常,但是radioValue.rv
对象仅保留在“ DR.php”。如何更新它以反映data-bind="text: selectedStyle"
值?
我已经尝试了radioValue.rv = ko.toJS(viewModel())
变体,但这没有用。
如果这是完全错误的,我如何获得templateStyle单选按钮的值? 所以我可以在我的JavaScript的其他方面使用它吗?
我保留了原来的问题,因为它显示了我的错误。
我不敢相信我花了两天时间和一个特别的问题来解决这个问题,但是这确实是。
HTML
<input type="radio" name="templateStyle" value="DR.php" data-bind="checked: tempStyle">
<input type="radio" name="templateStyle" value="DRH.php" data-bind="checked: tempStyle">
<input type="radio" name="templateStyle" value="PS.php" data-bind="checked: tempStyle">
<p>The template style selected is <span data-bind="text: selectedStyle"></span></p>
<button id="submitTemplate" data-bind="click: submitTemplate">Submit Template</button>
JS
var radioValue = { rv: "" };
function viewModel() {
var self = this;
self.tempStyle = ko.observable("DR.php"); // Set default selected radio button
self.selectedStyle = ko.computed(function() {
return self.tempStyle(); // Update viewModel to reflect user input
},
self
);
self.submitTemplate = function() {
radioValue.rv = self.tempStyle(); // Return user input on button click
console.log(radioValue.rv); // JS object can now be used anywhere
};
}
ko.applyBindings(new viewModel());
基本上,我试图尽早在viewModel
之外工作。
现在,我看到了灯光,明白了为什么淘汰赛这么好。
我的淘汰赛有点模糊,但我希望这会有所帮助。 您什么时候这样做:
return self.tempStyle();
它正在调用tempStyle。 tempStyle是ko.observable("DR.php")
,因此实际返回的是ko.observable("DR.php")()
,也就是获取可观察值的值,而不是可观察值本身。
尝试删除括号:
return self.tempStyle;
这样,radioValue.rv将被分配给可观察对象本身,而不是可观察对象的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.