Nativescript RadListView 未绑定到源 属性
Nativescript RadListView not binding to source property
我正在尝试实施 {N} telerik 的 UI RadListView。 Here 是他们的入门指南,我按照它作为参考。
我设置了以下 XML 布局:
list.xml
<StackLayout loaded="loaded" xmlns:lv="nativescript-telerik-ui/listview" xmlns="http://www.nativescript.org/tns.xsd">
<lv:RadListView items="{{ rankingsArray }}">
<lv:RadListView.listViewLayout>
<lv:ListViewLinearLayout scrollDirection="vertical"/>
</lv:RadListView.listViewLayout>
</lv:RadListView>
<lv:RadListView.itemTemplate>
<StackLayout orientation="horizontal" horizontalAlignment="center" class="sl_ranking">
<Label text="{{ name }}"></Label>
</StackLayout>
</lv:RadListView.itemTemplate>
</StackLayout>
基本上,我将列表视图绑定到 rankingsArray
,其中包含具有 name
属性.
的子元素
实际上我是这样绑定的:
list.js
var HashtagList = require("~/viewmodels/HashtagsList");
exports.loaded = function(args){
var hashtagList = new HashtagList();
var profile = args.object;
profile.bindingContext = hashtagList;
}
HashtagList class 定义为:
var Hashtag = require("~/classes/Hashtag");
var ObservableModule = require("data/observable-array");
class HashtagList{
constructor(){
}
get rankingsArray(){
if(!this._list){
this._list = new ObservableModule.ObservableArray();
this._list.push(new Hashtag("#pizzawithfriends"));
this._list.push(new Hashtag("#funky"));
}
return this._list;
}
}
module.exports = HashtagList;
如您所见,任何 HashtagList
对象都有一个 public rankingsArray
属性,其中 returns 一个 observable array
of Hashtag
对象。
下面是 Hashtag
对象的定义:
hashtag.js
"use strict";
var Hashtag = function(name){
var _name = name;
//====== NAME GETTER & SETTER ======//
Object.defineProperty(this,"name",{
get : function(){
return _name;
},
set : function(value){
_name = value;
}
})
}
module.exports = Hashtag;
问题是由于某种原因我收到以下错误:
Binding: Property: 'name' is invalid or does not exist. SourceProperty: 'name'
屏幕上什么也没有出现。
这很奇怪,因为如果我可以毫无问题地访问 HashtagList.rankingsArray.getItem(0).name
。
是什么导致了这种行为?
原来我以错误的方式关闭了 label
标签...
WRONG WAY
<lv:RadListView.itemTemplate>
<StackLayout orientation="horizontal" horizontalAlignment="center" class="sl_ranking">
<Label text="{{ name }}"></Label>
</StackLayout>
</lv:RadListView.itemTemplate>
RIGHT WAY
<lv:RadListView.itemTemplate>
<StackLayout orientation="horizontal" horizontalAlignment="center" class="sl_ranking">
**<Label text="{{ name }}" />**
</StackLayout>
</lv:RadListView.itemTemplate>
我正在尝试实施 {N} telerik 的 UI RadListView。 Here 是他们的入门指南,我按照它作为参考。
我设置了以下 XML 布局:
list.xml
<StackLayout loaded="loaded" xmlns:lv="nativescript-telerik-ui/listview" xmlns="http://www.nativescript.org/tns.xsd">
<lv:RadListView items="{{ rankingsArray }}">
<lv:RadListView.listViewLayout>
<lv:ListViewLinearLayout scrollDirection="vertical"/>
</lv:RadListView.listViewLayout>
</lv:RadListView>
<lv:RadListView.itemTemplate>
<StackLayout orientation="horizontal" horizontalAlignment="center" class="sl_ranking">
<Label text="{{ name }}"></Label>
</StackLayout>
</lv:RadListView.itemTemplate>
</StackLayout>
基本上,我将列表视图绑定到 rankingsArray
,其中包含具有 name
属性.
实际上我是这样绑定的:
list.js var HashtagList = require("~/viewmodels/HashtagsList");
exports.loaded = function(args){
var hashtagList = new HashtagList();
var profile = args.object;
profile.bindingContext = hashtagList;
}
HashtagList class 定义为:
var Hashtag = require("~/classes/Hashtag");
var ObservableModule = require("data/observable-array");
class HashtagList{
constructor(){
}
get rankingsArray(){
if(!this._list){
this._list = new ObservableModule.ObservableArray();
this._list.push(new Hashtag("#pizzawithfriends"));
this._list.push(new Hashtag("#funky"));
}
return this._list;
}
}
module.exports = HashtagList;
如您所见,任何 HashtagList
对象都有一个 public rankingsArray
属性,其中 returns 一个 observable array
of Hashtag
对象。
下面是 Hashtag
对象的定义:
hashtag.js
"use strict";
var Hashtag = function(name){
var _name = name;
//====== NAME GETTER & SETTER ======//
Object.defineProperty(this,"name",{
get : function(){
return _name;
},
set : function(value){
_name = value;
}
})
}
module.exports = Hashtag;
问题是由于某种原因我收到以下错误:
Binding: Property: 'name' is invalid or does not exist. SourceProperty: 'name'
屏幕上什么也没有出现。
这很奇怪,因为如果我可以毫无问题地访问 HashtagList.rankingsArray.getItem(0).name
。
是什么导致了这种行为?
原来我以错误的方式关闭了 label
标签...
WRONG WAY
<lv:RadListView.itemTemplate>
<StackLayout orientation="horizontal" horizontalAlignment="center" class="sl_ranking">
<Label text="{{ name }}"></Label>
</StackLayout>
</lv:RadListView.itemTemplate>
RIGHT WAY
<lv:RadListView.itemTemplate>
<StackLayout orientation="horizontal" horizontalAlignment="center" class="sl_ranking">
**<Label text="{{ name }}" />**
</StackLayout>
</lv:RadListView.itemTemplate>