Пользовательский контроль редактора номеров [дубликат]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

121
задан Hossein Narimani Rad 22 April 2015 в 10:10
поделиться

2 ответа

Свойство ConverterParameter не может быть связано, поскольку оно не является свойством зависимостей.

Поскольку Binding не является производным от DependencyObject, ни одно из его свойств не может быть зависимыми свойствами. Как следствие, привязка никогда не может быть целевым объектом другого связывания.

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

<Style TargetType="FrameworkElement">
    <Setter Property="Visibility">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource AccessLevelToVisibilityConverter}">
                <Binding Path="Tag" RelativeSource="{RelativeSource Mode=FindAncestor,
                                                     AncestorType=UserControl}"/>
                <Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}"/>
            </MultiBinding>
        </Setter.Value>
    </Setter>
</Style>

Преобразователь с несколькими значениями массив значений источника в качестве входных данных:

public class AccessLevelToVisibilityConverter : IMultiValueConverter
{
    public object Convert(
        object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values.All(v => (v is bool && (bool)v))
            ? Visibility.Visible
            : Visibility.Hidden;
    }

    public object[] ConvertBack(
        object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
242
ответ дан Clemens 26 August 2018 в 00:04
поделиться

Нет, к сожалению, это невозможно, потому что ConverterParameter не является DependencyProperty, поэтому вы не сможете использовать привязки

. Но, возможно, вы можете обмануть и использовать MultiBinding с IMultiValueConverter, чтобы передать свойства 2 Tag.

31
ответ дан Ruben Bartelink 26 August 2018 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: