首页 文章

无法访问Nativescript自定义属性

提问于
浏览
0

我试图在Nativescript中创建自定义组件 . 该组件与静态数据一起正常工作,我想为该控件添加一些自定义属性,但后面的代码中无法访问它们 . 我正在尝试创建类似MCQ的盒子或类似于无线电控制的东西,因此用户只能从给定的选项中选择一个选项 .

CustomControl.xml

<StackLayout orientation="vertical" class="form" loaded="loaded">
  <Repeater items="{{ items }}">
    <Repeater.itemTemplate>
      <StackLayout orientation="vertical" tap="itemTapped" id="{{id}}">
        <StackLayout orientation="horizontal" verticalAlignment="center">
            <Label text="{{text}}" class="form-field" width="88%"/>
            <Label text="{{characterCode}}" visibility="{{visible ? 'visible' : 'collapsed'}}" class="icon"/>
        </StackLayout>
        <StackLayout class="separator"/>
      </StackLayout>
    </Repeater.itemTemplate>
 </Repeater>
 </StackLayout>

CustomControl.js

var Observable = require("data/observable").Observable;
var ObservableArray = require("data/observable-array").ObservableArray;

var _component;
var _viewModel = new Observable();
var _selectedId = null;

exports.loaded = function(args){

  _component = args.object;

  //passing in _component.items as array throws undefined 
  var items = getInitializedArray(["Some text","Someother text"]);
  _viewModel.set("items", items);

  _component.bindingContext = _viewModel;

}


exports.itemTapped = function(args){
  var id = args.object.id;

  if(_selectedId === null){
    var item = _viewModel.get("items").getItem(id);
    item.visible = true;
    _viewModel.get("items").setItem(item, id);

  }else{
    var item = _viewModel.get("items").getItem(_selectedId);
    item.visible = false;

    item = _viewModel.get("items").getItem(id);
    item.visible = true;
    _viewModel.get("items").setItem(item, id);
  }
  _selectedId = id;
}

function getInitializedArray(data){
  var id=0;
  var items = data.map((listItem) => {
    return {
      text: listItem,
      characterCode: String.fromCharCode(0xea11),
      visible: false,
      id: id++
    }
  });
  return new ObservableArray(items);
}

试着在我的页面中使用它

<CustomComponents:CustomControl items="{{items}}"/>

但是使用args.object.items会抛出对象的未定义属性 .

我已经读过,我将不得不使用依赖性 - 可观察性,并且必须创建一个插件 . 但我没有使用任何平台特定的东西,我只是用现有的ui组件创建一个组件,它非常简单,我想要实现的 . 有没有办法绑定自定义属性?插件太复杂了,我怎么能实现呢?

1 回答

  • 0

    在阅读了文档并经历了各种论坛和github问题后,我发现并感谢Nick lliev的评论 .

    要为控件提供自定义属性,您必须使用仅代码技术,我编写了一个博客http://mobile.folio3.com/creating-custom-controls-in-nativescript/,描述了显示如何为自定义控件提供自定义属性的技术 .

相关问题