Исправленный JavaScript Дугласа Крокфорда включает функцию String.prototype.supplant
. Это короткий, знакомый и простой в использовании:
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
// Usage:
alert("I'm {age} years old!".supplant({ age: 29 }));
alert("The {a} says {n}, {n}, {n}!".supplant({ a: 'cow', n: 'moo' }));
Если вы не хотите менять прототип String, вы всегда можете приспособить его к автономному или поместить его в другое пространство имен или что угодно.
Я только что столкнулся с той же проблемой настройки двухстороннего связывания данных в архитектуре MVVM со списком ViewModel и RecyclerView. Я решил, что в этой ситуации было невозможно или не стоит усилий, чтобы заставить работать двухстороннее связывание, потому что вы напрямую не используете viewmodel в макете элемента повторного просмотра (используемая переменная макета имеет тип Person, а не Ваша модель представления).
Я бы предложил добавить вашу модель представления в качестве переменной макета, затем использовать android:onClick="@{() -> viewmodel.onSwitchClicked()}"
и реализовать этот метод в вашей модели представления.
Подробности в моем проекте смотрите здесь: https://github.com/linucksrox/ReminderList
.