Не уверен, как обновить структуру новой информацией

#bixby #bixbystudio

#биксби #bixbystudio

Вопрос:

Вопрос, касающийся Bixby Studio.

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

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

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

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

Хотите получить некоторое представление о проблеме и готовы предоставить дополнительную информацию по мере необходимости.

Некоторые из вещей, которые я пробовал в прошлом, похоже, хотят использовать существующий контекст «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:

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

Соберите входные данные через 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)}")
        }
      }
    }
  }
}