Незаметный Javascript
лучшая практика должна добавить методы обработчика событий для ссылок.
Эти подтверждают () , функция производит диалоговое окно, которое Вы описали и возвращаете TRUE или FALSE в зависимости от выбора пользователя.
Методы обработчика событий для ссылок имеют специальное поведение, которое является, что они уничтожают действие ссылки, если они возвращают false.
var link = document.getElementById('confirmToFollow');
link.onclick = function () {
return confirm("Are you sure?");
};
, Если Вы хотите ссылку на [1 120], требуют javascript, HTML должен быть отредактирован. Удалите href:
<a href="#" id="confirmToFollow"...
можно явно установить место назначения ссылки в конечном счете обработчик:
var link = document.getElementById('confirmToFollow');
link.onclick = function () {
if( confirm("Are you sure?") ) {
window.location = "http://www.stackoverflow.com/";
}
return false;
};
, Если Вы хотите тот же метод, обратился к нескольким ссылкам, можно получить nodeList ссылок, которые Вы хотите и применяете метод к каждому, поскольку Вы циклично выполняетесь через nodeList:
var allLinks = document.getElementsByTagName('a');
for (var i=0; i < allLinks.length; i++) {
allLinks[i].onclick = function () {
return confirm("Are you sure?");
};
}
существуют дальнейшие перестановки той же идеи здесь, такие как использование имени класса для определения, какие ссылки прислушаются к методу, и передать уникальное местоположение в каждого на основе некоторых других критериев. Они - шесть из один, полдюжины из другого.
Альтернативные Подходы (не поощренные методы):
Один препятствовавшая практика должна присоединить метод через атрибут onclick :
<a href="mypage.html" onclick="...
Другой препятствовавшая практика должна установить атрибут href к вызову функции:
<a href="javascript: confirmLink() ...
Примечание, что эти нежелательные методы все работают решения.
Вы можете добавить свойство State в свою TabViewModel и проверить события DependencyPropertyChanged.
Представьте себе следующее перечисление:
public enum TabViewModelState
{
True,
False,
FileNotFound
}
Затем добавьте свойство State в свою TabViewModel этого перечисления:
public static readonly DependencyProperty StateProperty =
DependencyProperty.Register("State", typeof(TabViewModelState), typeof(TabViewModel), new PropertyMetadata(OnStateChanged));
private static void OnStateChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
TabViewModel viewModel= (TabViewModel)obj;
//Do stuff with your viewModel
}
Используйте двустороннюю привязку к этому свойству в вашем элементе управления:
<CheckBox Checked="{Binding Path=State, Converter={StaticResource StateToBooleanConverter}, Mode=TwoWay}" />
И последнее, но не менее важное, реализуйте преобразователь, который будет преобразовывать в исходное значение, необходимое для элемента управления, и обратно. (В моем примере boolean <- > TabViewModelState):
public class StateToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
TabViewModelState state = (TabViewModelState) value;
return state == TabViewModelState.True;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
bool result = (bool) value;
return result ? TabViewModelState.True : TabViewModelState.False;
}
}
Итак, теперь у вас есть свойство State, которое управляется пользовательским интерфейсом и генерирует измененные события, когда вам нужно ответить ..
Надеюсь, это поможет!
Если вы поместите команду в свою ViewModel и просто привяжете к ней из своего UserControl, она все равно сработает. Вам не нужно пузыриться, UserControl просто найдет команду и использует ее.
Если бы у вас была команда делегата GoCommand в вашей ViewModel, привязка вашей кнопки UserControls выглядела бы просто так:
<Button Command="{Binding GoCommand}" >Go</Button>
I прошел через тот же мыслительный процесс, думая, что UserControl должен выдать команду, но этого не происходит - привязка просто подключится, когда найдет команду в ViewModel.
Надеюсь, это поможет, и я не пропустил точка! ;)
GoCommand 'на вашей ViewModel, ваша привязка кнопки UserControls будет выглядеть просто так:<Button Command="{Binding GoCommand}" >Go</Button>
Я прошел через тот же мыслительный процесс, думая, что UserControl должен выдавать команду, но этого не происходит - привязка просто подключается, когда он находит команду на ViewModel.
Надеюсь, это поможет, и я не упустил суть! ;)
GoCommand 'на вашей ViewModel, ваша привязка кнопки UserControls будет выглядеть просто так:<Button Command="{Binding GoCommand}" >Go</Button>
Я прошел через тот же мыслительный процесс, думая, что UserControl должен выдавать команду, но этого не происходит - привязка просто подключается, когда он находит команду на ViewModel.
Надеюсь, это поможет, и я не упустил суть! ;)
Вам следует взглянуть на Attached Command Behavior Марлона Греча, который позволяет вам присоединять команду ViewModel к событию GUI.