|
|
|
|
|
21.03.2018, 14:48
|
|
Обсуждение скриптов в Системе Базис
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
21.03.2018, 14:48
Рейтинг:
()
Если вы не знаете, или не уверены, куда задавать вопрос по скриптам в Системе Базис, то эта тема для вас.
Обратите внимание на полезные ответы в этой теме!
|
Просмотров: 257791
|
2 пользователя(ей) сказали cпасибо:
|
|
12.06.2018, 12:39
|
#81
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 170
Сказал(а) спасибо: 57
Поблагодарили 248 раз(а) в 46 сообщениях
Вес репутации: 141
|
Цитата:
Сообщение от Letos
Лучше использовать свойство ItemIndex у комбо, которое указывает на индекс выбранной строки. Есть два варианта решения:
|
Выручайте использую код
Код:
MakeProperties();
Action.Continue();
function MakeProperties() {
Prop = Action.Properties;
combo = Prop.NewCombo('Тип шкафа', 'Тип1\nТип2');
Prop.OnChange = function() {
if (combo.ItemIndex == 0){
Door = Prop.NewGroup('Дверь');
// какой-то еще код
}
else if (combo.ItemIndex == 1){
Box = Prop.NewGroup('ящик');
// какой-то еще код
}
}
}
Как очистить форму? Выбираю тип1 появляется дверь, выбираю тип2 появляется ящик, но и дверь остается. Подскажите какая функция очищает форму? Спасибо
|
|
|
12.06.2018, 20:04
|
#82
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Максим Геннадьевич
Как очистить форму? Выбираю тип1 появляется дверь, выбираю тип2 появляется ящик, но и дверь остается. Подскажите какая функция очищает форму? Спасибо
|
Вот решение:
Код:
MakeProperties();
Action.Continue();
function MakeProperties() {
Prop = Action.Properties;
combo = Prop.NewCombo('Тип шкафа', 'Тип1\nТип2');
Prop.OnChange = function () {
if (combo.ItemIndex == 0) {
if (typeof Box !== 'undefined'){
Box.DeleteSelf();
}
if (typeof Door !== 'undefined'){
Door.DeleteSelf();
}
Door = Prop.NewGroup('Дверь');
// какой-то еще код
}
else if (combo.ItemIndex == 1) {
if (typeof Box !== 'undefined'){
Box.DeleteSelf();
}
if (typeof Door !== 'undefined'){
Door.DeleteSelf();
}
Box = Prop.NewGroup('ящик');
// какой-то еще код
}
}
}
Но, в зависимости от количества свойств, оно может еще прибавить в размерах. Лучшим вариантом будет создание отдельной группы для изменяемых параметров и создавать эти параметры внутри группы, например:
Код:
MakeProperties();
Action.Continue();
function MakeProperties() {
var Prop = Action.Properties;
var combo = Prop.NewCombo('Тип шкафа', 'Тип1\nТип2');
var params = Prop.NewGroup('Параметры');
combo.OnChange = function () {
if (combo.ItemIndex == 0) {
params.Clear();
Door = params.NewGroup('Дверь');
// какой-то еще код
}
else if (combo.ItemIndex == 1) {
params.Clear();
Box = params.NewGroup('ящик');
// какой-то еще код
}
}
}
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
13.06.2018, 07:08
|
#83
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 170
Сказал(а) спасибо: 57
Поблагодарили 248 раз(а) в 46 сообщениях
Вес репутации: 141
|
В первом случае выдает
Door.DeleteSelf(); - TypeError oor.DeleteSelf is not function
Во втором случае проблема осталась и форма не очищается от предыдущего выбора. Думаю метод Clear() не срабатывает т.к я его до этого тоже использовал и толку не было.
|
|
|
13.06.2018, 11:08
|
#84
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Максим Геннадьевич
В первом случае выдает
Door.DeleteSelf(); - TypeError oor.DeleteSelf is not function
Во втором случае проблема осталась и форма не очищается от предыдущего выбора. Думаю метод Clear() не срабатывает т.к я его до этого тоже использовал и толку не было.
|
Проверил у себя на (вы же вроде про 8 версию пишете) демке версии 8.0.7.9649 - всё работает нормально. Думаю, метод Clear работал всегда. А у вас какая версия (полная)?
|
|
|
13.06.2018, 12:13
|
#85
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 170
Сказал(а) спасибо: 57
Поблагодарили 248 раз(а) в 46 сообщениях
Вес репутации: 141
|
Цитата:
Сообщение от Letos
Проверил у себя на (вы же вроде про 8 версию пишете) демке версии 8.0.7.9649 - всё работает нормально. Думаю, метод Clear работал всегда. А у вас какая версия (полная)?
|
Извиняюсь за смайлик, случайно нажал.
Версия 8.0.12.12765.
|
|
|
13.06.2018, 13:48
|
#86
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Максим Геннадьевич
Версия 8.0.12.12765.
|
Судя по версии, должно всё работать. Попробуйте запустить у себя такой код:
Код:
Action.Continue();
var btn = Action.Properties.NewButton('123123');
var grp = Action.Properties.NewGroup('group');
var i = 0;
btn.OnClick = function (){
i++;
grp.Clear();
grp.NewBool('item' + i);
}
Должны появиться кнопка и группа. При нажатии на кнопку в группе появляется логическое свойство с именем <"Item" + кол-во нажатий на кнопку>. При этом старых свойств в группе не должно оставаться. У вас так же отработает?
|
|
|
13.06.2018, 14:26
|
#87
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 170
Сказал(а) спасибо: 57
Поблагодарили 248 раз(а) в 46 сообщениях
Вес репутации: 141
|
Цитата:
Сообщение от Letos
Должны появиться кнопка и группа. При нажатии на кнопку в группе появляется логическое свойство с именем <"Item" + кол-во нажатий на кнопку>. При этом старых свойств в группе не должно оставаться. У вас так же отработает?
|
Появляются свойства один за другим. Т.е шесть нажатий на кнопку и в группе все шесть свойств без удаления предыдущего.
Clear отказывается срабатывать. Буду думать дальше. Спасибо
|
|
|
13.06.2018, 21:01
|
#88
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 170
Сказал(а) спасибо: 57
Поблагодарили 248 раз(а) в 46 сообщениях
Вес репутации: 141
|
Создаю заранее Door.NewBool() и Box.NewBool() и через Visible отображаю в зависимости от типа
|
|
|
17.06.2018, 06:59
|
#89
|
Пользователь
Регистрация: 04.04.2018
Адрес: Санкт-Петербург
Сообщений: 34
Сказал(а) спасибо: 18
Поблагодарили 18 раз(а) в 3 сообщениях
Вес репутации: 0
|
Добрый день. Запнулся на цикле. Имею функцию:
function HNap(Mater11,Hnap11){
arguments[0].SetActive();
var thick = ActiveMaterial.Thickness;
if(thick == 10){
arguments[1].Value=Window1.Hprm.Value-99;
arguments[1].Layout.Top=arguments[1].Layout.Top;
}
if(thick == 4){
arguments[1].Value=Window1.Hprm.Value-102;
arguments[1].Layout.Top=arguments[1].Layout.Top;
}
}
Если вызываю так:
Window1.Hprm.OnValueChange=function(){
HNap(Window1.Mater11,Window1.Hnap11);
HNap(Window1.Mater21,Window1.Hnap21);
HNap(Window1.Mater31,Window1.Hnap31);
}
то все нормально. Но мне она нужна через цикл. Моя попытка:
var mater = ["Mater11","Mater21","Mater31"];
var hnap = ["HNap11","HNap21","HNap31"];
Window1.Hprm.OnValueChange=function(){
for (var i=0, j=0; i<mater.length, j<hnap.length; i++, j++){
HNap(mater[i],hnap[j]);
}
}
но выдает ошибку:
TypeError: arquments(0).SetActive is not a function at HNap at Function.Window1.Hprm.OnValueChange
или что то другое , еси пробую варианты.Прошу указать на мою ошибку.
Спасибо.
|
|
|
17.06.2018, 22:56
|
#90
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 347
|
Цитата:
Сообщение от Guamoko
Прошу указать на мою ошибку.
Спасибо.
|
Ошибка в этой строке:
Код:
HNap(mater[i],hnap[j]);
Вы пытаетесь в свою функцию передать строку вместо объекта (ведь у вас в массиве хранятся строки). Ее можно решить двумя способами (выбирайте понравившийся, который вам удобнее понять):
Вариант 1
Код:
var mater = ["Mater11", "Mater21", "Mater31"];
var hnap = ["HNap11", "HNap21", "HNap31"];
Window1.Hprm.OnValueChange = function () {
for (var i = 0, j = 0; i < mater.length, j < hnap.length; i++ , j++) {
HNap(Window1[mater[i]], Window1[hnap[j]]);
}
}
Здесь перед передачей в функцию у окна запрашиваются свойства по имени из массива. [свернуть]
Вариант 2
Код:
var mater = [Window1.Mater11, Window1.Mater21, Window1.Mater31];
var hnap = [Window1.HNap11, Window1.HNap21, Window1.HNap31];
Window1.Hprm.OnValueChange = function () {
for (var i = 0, j = 0; i < mater.length, j < hnap.length; i++ , j++) {
HNap(mater[i], hnap[j]);
}
}
Здесь сразу в массив записываются свойства и потом просто передаются в функцию. Я считаю этот вариант наиболее понятным. [свернуть]
Пока писал варианты придумал еще один "изврат" на основе первого варианта. Используется как "смотрите, что можно сделать", но, по-моему этот вариант сложнее читать, чем первые два.:
"изврат"
Код:
const mater = "Mater"
const hnap = "HNap"
Window1.Hprm.OnValueChange = function () {
for (var i = 0; i < mater.length; i++) {
HNap(Window1[mater + i + '1'], Window1[hnap + i + '1']);
}
}
[свернуть]
P.S. Я писал всё это без проверки, поэтому возможны опечатки.
P.P.S.Из "придраться по поводу кода":
1. почему вы используете "arguments[0]" и "arguments[1]" вместо "Mater11" и "Hnap11"? Имхо, в вашем случае читаемость скрипта хуже.
2. Такой цикл тоже кажется странным:
Код:
for (var i=0, j=0; i<mater.length, j<hnap.length; i++, j++)
Ведь на каждой итерации (в вашем примере) у вас переменные i и j равны, и можно просто использовать лишь одну из них. Но это замечание актуально только если у вас количество mater'ов и hnap'ов одинаково и вы передаёте в функцию элементы массива с одинаковым индексом.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 11:00. Часовой пояс GMT +3.
|