Titanium Alloy控制器之间传递的主干模型对象具有空属性
我昨天开始使用钛合金,现在正在使用“创建你的第一个钛合金应用程序”教程() 当它出现在您单击一行的部件上并打开另一个视图时,我的参数值为空。这是我的密码: Bookdetails.jsTitanium Alloy控制器之间传递的主干模型对象具有空属性,titanium,titanium-alloy,backbone-model,Titanium,Titanium Alloy,Backbone Model,我昨天开始使用钛合金,现在正在使用“创建你的第一个钛合金应用程序”教程() 当它出现在您单击一行的部件上并打开另一个视图时,我的参数值为空。这是我的密码: Bookdetails.js var args = arguments[0] || {}; $.titleLabel.text = args.Title || 'Default Title'; $.authorLabel.text = args.Author || 'Default Author'; index.js var myBooks
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>
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>
当我运行我的应用程序时,它会显示“默认作者”和“默认标题”。当您在event.source中处理TableView触发的事件时,我正在android(samsung s3)上运行该应用程序。您不会得到用于为该行生成的主干对象,而是对象 另外,在TableView上操作时,最好访问
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();
}
另外,您可以发送未修改的主干模型对象,以便于对其进行进一步修改,而不是创建新的args
对象并将其发送给Bookdetails controller:
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.Title || 'Default Title';
$.authorLabel.text = args.Author || 'Default Author';
你能提供
index.xml
文件的来源吗?问题似乎发生在第var selectedBook=event.source行代码>但是如果没有index.xml,很难弄清楚event.source是什么样子的。使用index.xml代码编辑它可以工作!它也澄清了一些关于争论的东西。谢谢
var args = arguments[0] || {};
$.titleLabel.text = args.get('Title') || 'Default Title';
$.authorLabel.text = args.get('Author') || 'Default Author';