Не уверен, как обновить структуру с новой информацией - PullRequest
0 голосов
/ 14 апреля 2019

Вопрос по Bixby Studio.

Я пытаюсь понять, как принимать ввод текста от пользователя.

У меня есть структура фильтра с некоторыми полями, такими как SearchField, Genre, Platforms (игровые приставки) и Themes (несколько других записей)

По умолчанию все они являются необязательными, особенно в поле поиска. Тем не менее, я хотел бы, чтобы пользователь мог видеть, какие фильтры включены, и иметь возможность выбирать и изменять их значения (эти значения могут быть перезаписаны в процессе обучения NLP, но я не могу понять, как отключить поле .)

Я создал представление результатов для своих фильтров и настроил ячейки ввода для выбора определенного поля для изменения. (В этом случае SearchField.). Я успешно перенаправил на представление ввода, но, похоже, что какой бы текст я здесь ни вводил, он не сохраняется и не применяется к моему фильтру.

Ищет некоторое понимание проблемы и готов предоставить больше информации по мере необходимости.

Некоторые из вещей, которые я пробовал в прошлом, похоже, хотят взять существующий контекст «SearchField» внутри фильтров (который может не существовать) и применить его к новому «полю поиска». Однако это не работает и, кажется, создает цикл.

Я также пытался установить prompt-behavior (AlwaysSelection) в модели действия для SetSearchField, но, похоже, он ничего не делает.

// Result View for Filters
result-view {
  match {
    Filter(this)
  }
  message {
    template (Active Filters){
      speech (Would you like to change any filters?)
    }
  }
  render {
    layout-macro (filter-details) {
      param (filter) {
        expression (this)
      }
    }
  }
}
// Layout Macro

layout-macro-def(filter-details) {
  params {
    param (filter) {
      type (Filter)
      min (Required)
      max (One)
    }
  }

  content {
    section {
      title (Filters)
      content {
        input-cell {
          label (Search Name)
          value ("#{value(filter.name)}")
          on-click {
            intent {
              goal: SetSearchField // <-------- Field in question
            }
          }
        }
      }
    }
  }
}
// Input-view for SearchField

input-view {
  match {
    SearchField(searchField)
  }
  render {
    form {
      elements {
        text-input {
          id (val)
          type (SearchField)
          required (true)
        }
      }
      on-submit {
        goal:SearchField
      }
    }
  }
}
// SetSearchField action
action (SetSearchField) {
  description (Sets the name in a search filter)
  type (Fetch)
  collect {
    input (newSearchField) {
      type (SearchField)
      min (Required)
      prompt-behavior (AlwaysSelection)
    }
  }
  output (SearchField)
}
// SetSearchField endpoint
    action-endpoint (SetSearchField) {
      accepted-inputs (newSearchField) 
      local-endpoint ("filters/SetSearchField.js")
    }

// .js file

module.exports.function = function setName (newSearchField) {
  return newSearchField
}

1 Ответ

1 голос
/ 15 апреля 2019

Я обнаружил, что существует особый способ доступа к элементам формы ввода для представлений ввода.

Соберите входные данные через form -> elements, затем укажите их, используя viv.core.FormElement(id)

input-view {
  match {
    SearchField(searchField)
  }
  render {
    form {
      on-submit {
        goal: SearchField
        value: viv.core.FormElement(text)
      }
      elements {
        text-input {
          id (text)
          type (SearchField)
          label (Search for: )
          value("#{raw(searchField)}")
        }
      }
    }
  }
}

...