2016-08-13 307 views
0

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

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

我认为这个讨论会对你有所帮助https://github.com/NativeScript/NativeScript/issues/1620#issuecomment-188671352总的来说,你试图完成的任务只能使用代码隐藏 –

回答