昨天我开始使用钛,我正在使用'创建你的第一个钛应用'教程(this one)。
当它点击一行并且它打开另一个视图时,我的参数值为null。这是我的代码:
Bookdetails.js
var args = arguments[0] || {};
$.titleLabel.text = args.Title || 'Default Title';
$.authorLabel.text = args.Author || 'Default Author';
index.js
var myBooks = Alloy.Collections.Books;
var myBook = Alloy.createModel('Books', {Title:'Bleach',Author: 'Kubo Tite'});
myBooks.add(myBook);
myBook.save();
function showBook(event){
var selectedBook = event.source;
var args = {'Title': selectedBook.Title, 'Author': selectedBook.Author};
var bookDetails = Alloy.createController("Bookdetails",args).getView();
bookDetails.open();
}
$.index.open();
Bookdetails.xml
<Alloy>
<Window class="container">
<Label id="titleLabel"></Label>
<Label id="authorLabel"></Label>
</Window>
</Alloy>
我的书籍(模特)定义:
exports.definition = {
config: {
columns: {
"Title": "text",
"Author": "text"
},
adapter: {
type: "sql",
collection_name: "Books"
}
},
extendModel: function(Model) {
_.extend(Model.prototype, {
// extended functions and properties go here
});
return Model;
},
extendCollection: function(Collection) {
_.extend(Collection.prototype, {
// extended functions and properties go here
});
return Collection;
}
};
INDEX.XML
<Alloy>
<Collection src="Books" />
<Window class="container">
<TableView dataCollection="Books">
<TableViewRow onClick="showBook" title="{Title}"></TableViewRow>
</TableView>
<Menu id="menu" platform="android">
<MenuItem id="addBooks" title="Adicionar" onClick="callAddBook" showAsAction="Ti.Android.SHOW_AS_ACTION_IF_ROOM" />
</Menu>
</Window>
</Alloy>
当我运行我的应用程序时,它会显示“默认作者”和“默认标题”。我在android(samsung s3)上运行应用程序
答案 0 :(得分:3)
当您在event.source中处理由TableView触发的事件时,您不会获得用于为该行生成但仅为Titanium.UI.TableViewRow
对象生成的Backbone对象。
当您在TableView(check documentation上操作以查看差异)时,最好还是访问event.row
而不是event.source
。
要使此示例正常工作,只需将showBook函数更改为:
function showBook(event){
var selectedBook = myBooks.where({Title: event.row.title})[0];
var args = {'Title': selectedBook.get('Title'), 'Author': selectedBook.get('Author')};
var bookDetails = Alloy.createController("Bookdetails", args).getView();
bookDetails.open();
}
此外,您可以发送未经修改的Backbone Model对象,以便更轻松地对其进行任何进一步修改,而不是创建新的args
对象并将其发送到Bookdetails控制器:
function showBook(event){
var selectedBook = myBooks.where({Title: event.row.title})[0];
var bookDetails = Alloy.createController("Bookdetails", selectedBook).getView();
bookDetails.open();
}
Bookdetails.js
var args = arguments[0] || {};
$.titleLabel.text = args.get('Title') || 'Default Title';
$.authorLabel.text = args.get('Author') || 'Default Author';