Titanium Alloy控制器之间传递的主干模型对象具有空属性

Titanium 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

我昨天开始使用钛合金,现在正在使用“创建你的第一个钛合金应用程序”教程()

当它出现在您单击一行的部件上并打开另一个视图时,我的参数值为空。这是我的密码:

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>
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';