2014-09-30 6 views
3

В моем проекте у меня есть форма, которая может быть представлена ​​только тогда, когда некоторые поля заполнены, поэтому я создал функцию canSubmit в моем ViewModel:Смотря вычисляемый атрибут в VueJS

var vm = new Vue({ 
    data: { 
     experiments: [], 
     genes: "" 
    }, 
    el: "html", 
    computed: { 
     canSubmit: function() { 
      switch (this.searchType) { 
       case "": 
        return false; 
       case "gene": 
        return this.genes.length > 0 && this.experiments.length > 0; 
       default: 
        return false; 
      } 
     } 
    } 
}); 

У меня также есть кнопка, которую я хочу показать, если canSubmit возвращает истину, и некоторые <inputs>, которые изменяют модель данных:

<textarea v-model="genes" name="genes" id="gene_list"></textarea> 
<select v-model="experiments" name="experiments" multiple id="select_result_exps"> 
    <!--Various <options>--> 
</select> 
<button name="query" v-if="canSubmit" value="search" type="submit"">Submit</button> 

Так что, когда я изменить текстовое поле или выберите, мои обновления модели, и это означает, что canSubmit возвращает истину. Как бы кнопка не знала, что canSubmit изменился, поэтому остается невидимым.

Есть ли способ просмотра производного атрибута или метода, чтобы заставить это работать? В качестве альтернативы я могу заставить кнопку повторно проверить свои привязки?

+0

Это может быть легче понять проблему, если вы создали простой jsfiddle.net – julesbou

ответ

0

Настоящая причина, по которой мой код не работал, состоял в том, что переменные, связанные с текстовым полем и select, не считались зависимыми для вычисленного свойства canSubmit.

Я нашел это в documentation here.

Решение, как и на сайте, состояло в том, чтобы получить доступ к этим переменным изначально, например.

enableSubmit: function() { 
    this.genesString; //Adding these 
    this.gene_search.experiments; //lines fixed the problem 

    switch (this.search_type) { 
     case "gene": 
      return this.genesString.length > 0 && this.gene_search.experiments.length > 0; 
     case "experiment": 
      return this.experiment_search.experiment.length > 0; 
     default: 
      return false; 
    } 
}, 
6

Это верно работает в последней версии 0.11!

+0

Это был «Dependency Collection Гоча», что я пропустил первые несколько прочитывает документации. Могли бы вы сделать официальный список зависимостей для каждого вычислимого имущества? – Miguel

+0

Также самый последний выпуск v0.10.6, который я использую. – Miguel

+0

@Miguel 0.11-rc доступен на github в своей ветке. Последнее развитие происходит в «следующем» филиале. 0.11.0 скоро выйдет. В 0.11 вам больше не нужно указывать зависимости в вычисленных свойствах. –