我正在为{N}使用Telerik组件(没有支持),并且DataForm有一些问题。
当我将一个对象传递给页面上下文时,所有使用Picker编辑器的字段都不能选择正确的值。
我将展示我所写的代码:
teste-model.js
var Value = (function() {
function Value(text, value) {
this.text = text;
this.value = value;
}
return Value;
})();
var ValueModel = (function() {
function ValueModel() {}
Object.defineProperty(ValueModel.prototype, "model", {
get: function () {
if (!this._model) {
this._model = new Value("This is a text", "VALUE 1");
}
return this._model;
},
enumerable: true,
configurable: true
});
return ValueModel;
})();
exports.Value = Value;
exports.ValueModel = ValueModel;teste.js
var ValueModel = require("./teste-model").ValueModel;
var page;
exports.onPageLoaded = function(args) {
console.log("Carregando página...");
page = args.object;
page.bindingContext = new ValueModel();
console.log(JSON.stringify(page.bindingContext));
}teste.xml
<Page loaded="onPageLoaded"
xmlns:df="nativescript-telerik-ui-pro/dataform">
<StackLayout>
<df:RadDataForm id="myDataForm" source="{{ model }}">
<df:RadDataForm.properties>
<df:EntityProperty name="text" displayName="Text" index="0" />
<df:EntityProperty name="value" displayName="Value" index="1" valuesProvider="VALUE 0, VALUE 1, VALUE 2">
<df:EntityProperty.editor>
<df:PropertyEditor type="Picker" />
</df:EntityProperty.editor>
</df:EntityProperty>
</df:RadDataForm.properties>
</df:RadDataForm>
</StackLayout>
</Page>字段值应该显示“值1”,但显示“值0":

有什么解决办法吗?
更新
我已经做了Vladimir建议的更改,但是选择符属性仍然没有反映对象的更改。
我还添加了一个按钮到页面,用随机值填充数据表单。text属性通常会侦听更改,但选择器属性不会。
如果选择一个选择值并单击该按钮,则该属性将重置为第一个提供程序值。
实际代码是:
teste.xml
<Page loaded="onPageLoaded"
xmlns:df="nativescript-telerik-ui-pro/dataform">
<StackLayout>
<df:RadDataForm id="myDataForm" source="{{ model }}">
<df:RadDataForm.properties>
<df:EntityProperty name="text" displayName="Text" index="0" />
<df:EntityProperty name="value" displayName="Value" index="1" valuesProvider="VALUE 0, VALUE 1, VALUE 2">
<df:EntityProperty.editor>
<df:PropertyEditor type="Picker" />
</df:EntityProperty.editor>
</df:EntityProperty>
</df:RadDataForm.properties>
</df:RadDataForm>
<Button text="change" tap="changeModel" />
</StackLayout>
</Page>teste.js
exports.onPageLoaded = function(args) {
console.log("Carregando página...");
page = args.object;
page.bindingContext = new ValueModel();
}
exports.changeModel = function(args) {
var arr = ["VALUE 0", "VALUE 1", "VALUE 2"];
page.bindingContext.set("model", new Value(
Math.random(10000, 99999).toString()
, arr[Math.floor(Math.random() * arr.length)]
)
);
console.log(JSON.stringify(page.bindingContext.model));
}teste-model.js
var Observable = require("data/observable").Observable;
var Value = (function() {
function Value(text, value) {
this.text = text;
this.value = value;
}
return Value;
})();
var ValueModel = (function(_super) {
__extends(ValueModel, _super);
function ValueModel() {
_super.call(this);
this.model = new Value("This is a texte","VALUE 1");
}
Object.defineProperty(ValueModel.prototype, "model", {
get: function () {
return this.get("_model");
},
set: function(_model) {
this.set("_model", _model);
},
enumerable: true,
configurable: true
});
return ValueModel;
})(Observable);
exports.Value = Value;
exports.ValueModel = ValueModel;发布于 2016-10-27 08:35:38
看起来,您正在对一个简单的JavaScript对象( model)进行运行时更改,这就是为什么这些更改没有反映在RadDataForm中。当所需的行为能够在运行时更改某些对象属性时,您可以使用位于Observable的data/observable模块的{N} tns-core-modules。然后,让ValueModel扩展它并更改模型属性的签名,如下所示:
var observable_1 = require("data/observable");
var ValueModel = (function (_super) {
__extends(ValueModel, _super);
function ValueModel() {
_super.call(this);
this.model = new Value("This is a text", "INITIAL VALUE 0");
this.model.value = "VALUE 1";
}
Object.defineProperty(PersonViewModel.prototype, "model", {
get: function () {
return this.get("_model");
},
set: function (value) {
this.set("_model", value);
},
enumerable: true,
configurable: true
});
return PersonViewModel;
}(observable_1.Observable));您还可以查看nativescript样例TypeScript变体存储库的主分支中的GitHub,该存储库已被更改以说明此场景。
https://stackoverflow.com/questions/40275063
复制相似问题