JSFiddle - React, Tailwind, and code Playground
by oti ext
HTML
<select data-bind="
options : personSelect.options,
optionsText : personSelect.optionsText,
value : personSelect.optionsValue
"></select>
<hr>
<h1 id="pageTitle" data-bind="text: item().greeting"></h1>
<!-- ko foreach: item().profile -->
<p data-bind="text: $data"></p>
<!-- /ko -->
<footer class="author" data-bind="text: author()"></footer>
JavaScript
var person = [
{
name: 'さかい',
greeting: 'ポイントカード持たない派です!',
profile: [
'私の名前は酒井優です。',
'チャラい優とか、出会い優とかとも呼ばれています。',
'みんなが私にいろいろ教える“酒井宿”で日々圧倒的成長中です!'
]
},
{
name: 'おち',
greeting: 'シャトーブリアン食いたい',
profile: [
'すごく失礼に聞こえたらすみません。',
'カルーセルはやめろ。'
]
},
{
name: 'てんじろう',
greeting: 'てんじろうだよぉ',
profile: [
'週7で飲んでるよぉ',
'チャームポイントは目だよぉ'
]
}
];
function CreateProfileData(idx) {
var data = person[idx];
return data;
}
function ProfileViewModel() {
var self = this;
// 初期設定として0
self.item = ko.observable(CreateProfileData(0));
self.author = function() {
return 'by ' + self.item().name;
};
// 指定範囲のselect
self.personSelect = {
options : ko.observableArray([0,1,2]),
optionsValue : ko.observable(),
optionsText : function(val) {
return person[val].name;
}
};
self.personSelect.optionsValue.subscribe(function(newVal) {
// 変更されたselectによって self.item() を変える
switch (newVal) {
case 0: self.item(person[0]); break;
case 1: self.item(person[1]); break;
case 2: self.item(person[2]); break;
default: self.item(person[0]); break;
}
});
console.log(self.item().name)
}
var vm = new ProfileViewModel();
ko.applyBindings(vm);