代码之家  ›  专栏  ›  技术社区  ›  Morfinismo

是否可以在createdatasource上创建多个草稿项?

  •  0
  • Morfinismo  · 技术社区  · 8 年前

    我正在构建一个应用程序,该应用程序将能够创建要在会议中讨论的议程项目。议程项目可能包括一个或多个要讨论的附件,因此AgendaItems和AgendaDocs模型之间存在一对多关系。到目前为止,我有一个如下所示的插入表单:

    enter image description here

    “选择文件”按钮是一个驱动器选择器,我在onDocumentSelect事件中的代码如下:

    var docs = result.docs; 
    var createDataSource = app.datasources.AgendaDocs.modes.create;
    for(var i=0; i<docs.length-1; i++){
      var uniqueDraft = createDataSource.item;
      createDataSource.items.push(uniqueDraft);
    }
    for(var i=0; i<createDataSource.items.length-1; i++){  
      var draft = createDataSource.item;
      createDataSource.items[i].DocTitle = docs[i].name;
      createDataSource.items[i].DocURL = docs[i].url;
      createDataSource.items[i].DriveID = docs[i].id;
    }
    console.log(createDataSource.items);
    

    该代码应该填写“选择文件”按钮下方的列表小部件,但正如您所看到的,这三项是相同的。列表小部件的数据源是“AgendaDocs.modes.create”,插入表单的数据源是“AgendaItems.modes.create”。

    正在读取 official documentation 来自appmaker,使我认为这是可能的,因为“CreateDataSource”的属性包括 项目 “。我需要这里的专家的帮助。这可能吗?我使用了错误的方法吗?”?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Pavel Shkleinik    8 年前

    首先,似乎您正试图在一次调用中从不同的模型以及它们之间的关系创建记录。。。目前,App-Maker还不能消化这么复杂的一餐。您很可能需要将流程分为多个步骤:

    1. 创建(持久化)议程项目
    2. 创建AgendaDocs记录以及与AgendaItem的关系

    类似流程在中实现 Travel Approval 模板应用程序,但它与您的不完全相同,因为它不会批量创建关联。

    回到原来的问题。是的,有可能有多个 草稿 ,但不使用创建数据源。您正在寻找 Manual Save Mode . 在某处 完美的世界 您的代码与此类似:

    // AgendaItems in Manual Save mode
    var agendaDs = app.datasources.AgendaItems;
    
    // this line will create item on client and automatically push it
    // to ds.items and set ds.item to it.
    agendaDs.createItem();
    var agendaDraft = agendaDs.item;
    
    // Field values can be populated from UI via bindings...
    agendaDraft.Type = 'X';
    agendaDraft.Description = 'Y';
    
    
    // onDocumentSelect Drive Picker's event handler
    var docsDs = agendaDs.relations.AgendaDocs;
    
    result.docs.forEach(function(doc) {
      // this line will create item on client and automatically push it
      // to ds.items and set ds.item to it...however it will throw an exception
      // with this message:
      // Cannot save a foreign key association for the 'AgendaItem'
      // relation because the target record has not been persisted
      // to the server. To fix this, call saveChanges()
      // on the data source for that record's model: AgendaItem
      docsDs.createItem();
      var docDraft = docsDs.item;
    
      docDraft.DocTitle = doc.name;
      docDraft.DocURL = doc.url;
      docDraft.DriveID = doc.id;
    });
    
    
    // submit button click
    agendaDraft.saveChanges();