2016-02-17 2 views
0

Относительно этого сообщения: Scoped Variable in List Box. У меня есть вопрос о преобразовать переменную области видимости в простое привязку данных.Преобразование переменной области в простое привязку данных

Существует одна комбинированная коробка, два списка и две кнопки. Эти два списка могут обмениваться значениями, щелкая соответствующую кнопку. Значения поля списка связаны со значением поля со списком. Например, пользователь выбирает значение из поля со списком (например, 2), тогда пользователь может выбрать перемещение значений из списка A в поле списка B и наоборот.

Если я хочу сохранить эти значения (значение поля со списком и значение поля списка), мне нужна кнопка и создайте форму и представление для их хранения.

После прочтения ответа от Paul Stephen Withers, я решил использовать replaceItemValue, а затем вызвать save(). Я ищу в Интернете о том, как использовать replaceItemValue, и, наконец, я могу сохранить значение поля списка A, списка B и поле со списком. Я вижу сохраненные значения в представлении.

Код выглядит так:

document1.replaceItemValue("BListBoxField", viewScope.BselectItems)+ document1.replaceItemValue("AListBoxField", viewScope.AselectItems)+document1.replaceItemValue("ComboBoxField", comboBoxValue); 
document1.save(); 

Мне нужно получить значение зависит от значения поля со списком, у меня есть следующие действия:

В поле со списком, я выбираю OnChange событие, в параметры сервера, я выбираю Partial Update и элемент, который мне нужно обновить. (в моем случае я выбираю частичное обновление таблицы, потому что там расположены оба списка A и B)

В поле списка B мне нужно, чтобы соответствующее значение зависело от значения поля со списком, поэтому я использую DbLookup для поиска стоимость. Таким образом, в редакторе скриптов, я пишу следующий код:

var comboBoxValue = getComponent("comboBox4").getValue(); 
if ((comboBoxValue == null) || (null == comboBoxValue)) 
{ return "No value here";} 
else if ((comboBoxValue != null) || (null != comboBoxValue)) 
{ 
    var lookUpComboBoxValue = @DbLookup(@DbName(),"ViewName", comboBoxValue,3 ) 
return lookUpComboBoxValue; 
} 

viewScope.BselectItems = lookUpComboBoxValue; 
    if (!viewScope.BselectItems) { 
         viewScope.BselectItems = []; 
        } 
        return viewScope.BselectItems; 

В списке А, он похож на поле списка B и код выглядит так:

var comboBoxValue = getComponent("comboBox4").getValue(); 
if ((comboBoxValue == null) || (null == comboBoxValue)) 
{ return "No value here";} 
else if ((comboBoxValue != null) || (null != comboBoxValue)) 
{ 
var lookUpComboBoxValue = @DbLookup(@DbName(),"ViewName", comboBoxValue,3) 
return lookUpComboBoxValue; 
} 

viewScope.AselectItems = lookUpComboBoxValue; 
    if (!viewScope.AselectItems) { 
     viewScope.AselectItems = []; 
    } 
    return viewScope.AselectItems; 

Я бегу кода и выберите «2» в поле со списком, окно списка может извлекать значения, относящиеся к «2».

Но если переместить значения в поле списка, я получаю исключение: 'viewScope.AselectItems' равно null. Он выделить этот код вызвать исключение:

viewScope.AselectItems.remove(sel[i]); 

я просматриваю код, и я предполагаю, что ошибка в списке поле значения не код в кнопке. Я думаю, что эта часть является причиной того, что у меня есть ошибки, потому что если удалить эту часть кода не происходит исключение:

viewScope.BselectItems = lookUpComboBoxValue; 
if (!viewScope.BselectItems) { 
         viewScope.BselectItems = []; 
        } 
        return viewScope.BselectItems; 

Для решения исключения, я нахожу этот пост How can I know if a viewScope variable has been initialized полезно.

добавить этот код в поле списка

if(viewScope.containsKey(BselectItems)){ 
           viewScope.BselectItems .add(sel[i]); 
          } 
          else 
          { 
           return "not contains key" 
          } 

я все еще получаю исключение

[ReferenceError] 'BselectItems' not found 

На данный момент эта проблема кажется снова вернуться к этому вопросу, нужно ли мне, чтобы преобразовать переменная области для простой привязки данных?

Для сохранения значений я могу использовать replaceItemValue для сохранения значения. После сохранения значения, если мне нужно получить значение, я могу использовать DbLookup для поиска значения. Но как сделать, чтобы эта ценность поиска стала взаимозаменяемой между списками?

Благодарен за ваш совет. Спасибо.

Ссылки:

https://www-10.lotus.com/ldd/ddwiki.nsf/dx/10082008104832AMDOCKD8.htm

https://www-10.lotus.com/ldd/ddwiki.nsf/dx/xpages-scoped-variables.htm

+0

Я удаляю дизайн кода, чтобы уменьшить его до минимума. – Learner

ответ

0

Я не построили что-то подобное, так что я не полный шаг за шагом для вас.

Но есть несколько понятий, важных для понимания здесь при разработке того, что нужно делать, чего вы хотите. Простите меня, если вы уже понимаете их, но из этого вопроса и аналогичного предыдущего я не уверен в этом.

  • Свойство value любого редактируемого компонента определяет, где значение должно быть извлечено и сохранено. Это привязка к тому, где хранить и загружать значение, а не видимое значение компонента. Итак, как вы говорите, если вы хотите сохранить значения в документе, это должно быть, например, #{document1.myField}.
  • Свойство defaultValue редактируемого компонента позволяет вам установить начальное значение для компонента. Однако помните, что это будет отменено привязкой значения в свойстве value. Если вы хотите указать значение, видимое пользователю, переопределяющее привязку значения, перейдите к этому источнику данных и установите там значение (например, #{javascript:document1.replaceItemValue("myValueField", "my new value")}
  • Свойство selectItems определяет, какие опции доступны для выбора. Он не обозначает, они будут выбраны.Так что если вы просто добавите к selectItems, фактически не выбрав их, ничего не будет сохранено. Вы можете взаимодействовать с самим компонентом, чтобы обновлять выбранные значения, но более целесообразно взаимодействовать там, где хранятся данные , определенные в value собственности.

Я настоятельно рекомендую отходя от типа на Submit кнопки и saveDocument простой action. Первый сохранит все источники данных, не относящиеся к чтению, на вашей странице, независимо от того, собираетесь ли вы это делать или нет. Последний просто вызовет спасение.

Одним из вариантов является оставить привязку к переменным viewScope, то при использовании сценария кнопки SSJS replaceItemValue написать переменную viewScope в document1 источника данных, а затем вызвать save().

+0

Спасибо за ответ. Я использую replaceItemValue и вызываю save(). Наконец, я могу сохранить значения. – Learner

+0

Однако, после того, как я могу сохранить значение, возникает другой вопрос, я пытаюсь его решить, но не могу. Я просматриваю вопрос и, кажется, вернусь к теме, поэтому я обновляю контент. Благодарен за любой совет. Спасибо. – Learner

Смежные вопросы