说我有一个简单的viewModel,其中属性foo
应该与其他属性一样,只是它是用另一个属性的值生成/计算的,并且每当另一个属性更新时都会更新:
const observableModule = require("tns-core-modules/data/observable");
function HomeViewModel() {
const viewModel = observableModule.fromObject({
name: 'John',
foo() {
return 'Hello ' + viewModel.name; //not really what I'm looking for
}
});
return viewModel;
}
Knockout.js具有这些“已计算”的可观察对象,我发现它们在许多地方都非常方便。这就是使用Knockout.js的样子:
function HomeViewModel() {
const viewModel = {
name: ko.observable('John'),
foo: ko.pureComputed(() => 'Hello ' + viewModel.name())
};
return viewModel;
}
NativeScript中是否存在类似内容?
答案 0 :(得分:0)
NativeScript Core的重量很轻,没有像开箱即用的计算功能那样精美的功能。但是有propertyChangeEvent
可以用来在foo
更改时更新name
。
var observableModule = require("tns-core-modules/data/observable");
function HomeViewModel() {
var viewModel = observableModule.fromObject({
name: "John",
foo: ""
});
viewModel.on("propertyChange", function (event) {
const propertyName = event.propertyName;
if (propertyName === "name") {
viewModel.set("foo", "Hello " + event.value);
}
});
// To compute initial value for `foo`
viewModel.notifyPropertyChange("name", viewModel.get("name"), viewModel.get("name"));
return viewModel;
}
module.exports = HomeViewModel;
如果您希望使用方便的语法来查找计算,动态模板等高级功能,我建议迁移到Angular / Vue。我还没有使用过Knockout,但是我想它可以与NativeScript集成在一起,就像今天Angular / Vue一样,可以花点力气-一天结束时,所有内容都只是JavaScript;)