这看起来很基本,但我似乎无法弄清楚如何从数据源手动设置当前项目?
为了说明:我有一个表,我注意到当我选择一行来编辑一个字段时,该行的项目将成为当前项目,因此如果我在该行上有一个链接以导航到一个页面,所选项目的行将是导航页面的datasource.item。
但是,我还注意到,如果我只是将鼠标悬停在一行上而不选择编辑字段,那么如果我单击导航到页面的链接,它将加载先前选择/编辑的任何行的数据。因此,我想知道如何使它只在鼠标上:结束(或点击快捷键而不事先点击行中的另一个字段)datasource.item将更新到鼠标已经消失的行而不是要求首先编辑行上的字段。我希望这是有道理的。
非常感谢协助。谢谢!
答案 0 :(得分:4)
为什么会这样:
AM code: generate button click event
User code: handle button's click event
User code: navigate user to different page
AM code: destroy DOM of current page
AM code: build DOM for new page
-- dead code after this line
AM code: row click event handler
AM code: change datasource's current item
Row的click事件处理程序永远不会获得控制权,因为行被用户代码破坏。
Morfinismo解决方案的作用是什么?
AM code: generate button click event
User code: handle button's click event
AM code: row click event handler
AM code: change datasource's current item
-- moved lines
User code: navigate user to different page
AM code: destroy DOM of current page
AM code: build DOM for new page
以下是更多技术细节:Event Loop
在App Maker中,可以使用
解决此问题// button's onClick event handler
app.datasource.ListDatasource.selectKey(widget.datasource.item._key);
// button's onClick event handler
app.pages.ShowMeNext.properties.Key = widget.datasource.item._key;
app.showPage(app.pages.ShowMeNext);
// next page's onAttach event handler
app.datasources.RecordDatasource.filters._key._equals = app.currentPage.properties.Key;
app.datasources.RecordDatasource.load();
// button's onClick event handler
var params = {
key: widget.datasource.item._key
};
var page = app.pages.ShowMeNext;
app.showPage(page);
google.script.history.replace(null, params, page.name);
// next page's onAttach event handler
google.script.url.getLocation(function(location) {
app.datasources.RecordDatasource.filters._key._equals = location.parameters.key;
});
// button's onClick event handler
window.key = widget.datasource.item._key;
// next page's onAttach event handler
app.datasources.RecordDatasource.filters._key._equals = window.key;
ListDatasource - list / grid / table datasource
RecordDatasource - 专用于特定记录的数据源(单记录数据源)
答案 1 :(得分:3)
使用超时功能。发生这种情况是因为appmaker需要一些时间来更改数据源中的项目。你可以在按钮或链接的 onClick 事件处理程序中使用这样的东西,它将带你到另一页:
setTimeout(function(){
app.showPage(app.pages.pageToNavigate);
},200);
那应该解决这个问题。我希望这有帮助!