в представлении ввода Bixby, как мне сопоставить несколько понятий в множественном поле выбора - PullRequest
0 голосов
/ 01 октября 2019

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

Итак, у меня есть такое представление:

input-view{
    match:PremiumContent

  message("Which of the following features do you need?")

    render{
    form{
      elements{
        checkbox{
          id(premiumcontent)
          type (PremiumContent)
          primary-text (Yes, I want to provide premium content.)
          secondary-text (We recommend providing a free tier.)
          value(true)
        }
        checkbox{
          id(searchabletext)
          type (SearchableText)
          primary-text (Yes, I want to provide searchable text.)
          secondary-text (Passages of one to three paragraphs work well.)
          value(true)
        }
        checkbox{
          id(twittersearch)
          type (TwitterSearch)
          primary-text (Yes, I want to pull permissioned Twitter results into my capsule.)
          secondary-text (AltBrains supports the full twitter search syntax.)
          value(true)
        }
         checkbox{
          id(carousel)
          type (Carousel)
          primary-text (Yes, I want an image gallery.)
          secondary-text (JPG or PNG at least 720 x 480.)
          value(true)
        }
      }
          on-submit{
        goal:PremiumContent
        value:viv.core.FormElement(premiumcontent)
      }
    }
  }
}

, которое заменит четыре отдельных страницы просмотра для PremiumContent, SearchableText, Carousel и TwitterSearch. Но я не знаю, как построить запрос на совпадение. Как мне справиться с этим?

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Создайте структуру, которая содержит все логические свойства.

В качестве примера используйте следующее. Подробнее здесь

input-view {
  match: Person (this)

  message {
    template (Fill in your information)
  }

  render {
    form {
      // the intent that will be used when the form is submitted
      on-submit {
        goal: viv.tutorial.Person
        value: viv.tutorial.Person {
          wineClubJoined: viv.core.FormElement(wineclub)
          beerClubJoined: viv.core.FormElement(beerclub)
        }
      }
      elements {
        checkbox {
          id ("wineclub")
          type (WineClubJoined)
          primary-text (Join the wine club)
          secondary-text (We will invite you to our monthly wine events)
          value ("#{raw(this.wineClubJoined)}")
        }
        checkbox {
          id ("beerclub")
          type (BeerClubJoined)
          primary-text (Join the beer club)
          secondary-text (We will invite you to our monthly beer events)
          value ("#{raw(this.beerClubJoined)}")
        }

      }
    }
  }
1 голос
/ 02 октября 2019

Я бы попытался сделать родителя Boolean, а затем каждый из PremiumContent, SearchableText, TwitterSearch и Carousel либо принял бы роль этого родительского логического значения, либо расширил его. Затем вы должны использовать это родительское логическое значение в шаблоне совпадения.

Так что-то вроде:

boolean (Parent) {}

и либо

boolean (PremiumContent) {
  role-of (Parent)
}
boolean (SearchableText) {
  role-of (Parent)
}
...

или

boolean (PremiumContent) {
  extends (Parent)
}
boolean (SearchableText) {
  extends (Parent)
}
...

и тогда ваш шаблон совпадения будет:

match: Parent

, а ваш on-submit должен выглядеть примерно так:

on-submit {
  goal: Parent
  value-set: Parent {
    viv.core.FormElement (premiumcontent)
    viv.core.FormElement (searchabletext)
    ...
  }
}

В качестве альтернативы вы можете создать структуру с четырьмя различными логическими свойствамиа затем использовать структуру в шаблоне совпадения. Так что-то вроде:

structure (Thing) {
  property (premiumContent) {
    type (PremiumContent)
  }
  ...
}

И тогда ваш шаблон совпадения будет:

match: Thing

, и тогда ваш on-submit будет:

on-submit {
  goal: Thing
  value: Thing {
    premiumContent: viv.core.FormElement (premiumcontent)
    ...
  }
}
...