nix*_*xon 6 knockout-2.0 knockout.js
我有一个像这样的viewModel:
var viewModel =
{
firstName: 'Fred'
}
Run Code Online (Sandbox Code Playgroud)
和像这样绑定它的文本框
<input data-bind="value: firstName" >
Run Code Online (Sandbox Code Playgroud)
我的印象是,这将设置单向绑定,因为firstName属性不是可观察的.对文本框的更改正在更新viewModel对象.有人可以解释发生了什么以及如果我的假设是错误的吗?
Ali*_*deh 18
如果在knockout绑定中执行属性,则变为单向/只读.所以在下面的模型中例如:
class Person {
constructor(data) {
// Method 1: Consume observable using ()
this.firstName = ko.observable(data.firstName);
// Method 2: Omit the observable
this.flatFirstName = data.firstName;
this.lastName = ko.observable(data.lastName);
this.fullName = ko.computed(() => `${this.firstName()} ${this.lastName()}`);
}
}
const me = new Person({
firstName: "John",
lastName: "Smith"
});
ko.applyBindings(me);
Run Code Online (Sandbox Code Playgroud)
我可以简单地通过在绑定中执行它来使FirstName成为单向/只读属性:
<input data-bind="value: firstName()">
<input data-bind="value: flatFirstName">
<input data-bind="value: lastName">
<label data-bind="text: fullName"></label>
Run Code Online (Sandbox Code Playgroud)
所以现在第一个输入只获取值而不能设置它,但第二个输入将具有双向绑定并将更新LastName属性.
希望这可以帮助.
单向绑定意味着:对 UI 的修改(在输入中键入)将“应用”到视图模型。但是,如果您更改 viewModel(通过代码),UI 将不会刷新。
如果需要通过代码(js)刷新UI,则必须使用可观察的。
正如您在此小提琴中所看到的,如果您单击“通过代码更改”按钮,视图模型将发生更改,但 UI 不会发生更改。
var viewModel = {
firstName: 'Fred',
test: function () {
alert(viewModel.firstName);
},
change: function () {
viewModel.firstName = "new Value";
}
};
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助。
| 归档时间: |
|
| 查看次数: |
6839 次 |
| 最近记录: |