2

我正在尝试将小部件的数据源定义为查询的结果,但我不确定它是否可行。

我正在使用 SQL 视图和一个表,我想显示来自视图的表上的 ID 值。

function queryValue(source, model, key){
  console.log("source " + source);
  app.datasources[model].query.filters.id._equals = source;
  app.datasources[model].load(function () {
    console.log(app.datasources.users.items[0][key]);
    return app.datasources.users.items[0][key];
  });
  app.datasources[model].query.clearFilters();
}

像这样称呼它:

queryValue(@datasource.item.[the_id], "[the_SQLView_Datasouce]", "[the_field_i_want]");

在这种情况下,小部件是一个表格,因此该功能将重复表格中的项目数量

问题是,要么我得到的结果与物品数量相同,要么第一个不起作用!

第二个问题是结果不会覆盖要显示的小部件文本。 在此处输入图像描述

这是一个非常简单的功能,我确实找到了一些解决方法,但没有使用数据源功能,而且它们工作得太慢,有什么建议吗?可以用数据源做这样的事情吗?

4

2 回答 2

2

如果我正确理解了这个问题,您可能想在服务器端进行查询。发布的示例代码的问题是它在任何负载可以返回之前多次触发单个数据源上的负载。完成后,数据源仅加载其中一个负载的结果,我相信最后一个。因此,您可能会看到您对所有回调执行的最后一个查询的结果。

因此,您的代码应该是服务器端脚本,并且应该类似于:

function queryValue(source, model, key){
  console.log("source " + source);
  var query = app.models.newQuery();
  query.filters.id._equals = source;
  var results = query.run;
  return results[0].key;
}

(凭记忆写的,如有错误请见谅。)

于 2017-01-23T18:25:39.257 回答
2

按照德文的建议:

前端

/*****************************************************************************
Front-end function that calls the querying function @queryValue(source, model, key) in controller_TransformId
@source => the field ID to transform to label
@model => the model name to be queried
@key => the label to be acquired with the query
@wwidget => the widget making the request
This function works as a model to manage the transactions between the 
controller at the backend and the view.  
******************************************************************************/
function buildTransformID(source, model, key, widget){ 
  google.script.run.withSuccessHandler(
    function successHandler(expectedValue){
      widget.text = expectedValue;})
  .withFailureHandler(
    function failureHandler(){
      widget.text = "undefined";})
  .queryValue(source, model, key);
}

后端

/*****************************************************************************
Back-end function that queries the database
@source => the field ID to transform to label
@model => the model name to be queried
@key => the label to be acquired with the query    
This function works works as a controller to query the database from the backend    ******************************************************************************/
function queryValue(source, model, key){ 
  var query = app.models[model].newQuery();
  query.filters.id._equals = source;
  var results = query.run();
  console.log("CONTROLLER return :" + results[0][key]);
  return results[0][key];
}

是否必须通过 widget.text 值?successHandler 回调是异步的,因此常规返回只会给我空值

于 2017-01-24T11:25:33.373 回答