JSFiddle - React, Tailwind, and code Playground
by spstieng
HTML
<link rel="stylesheet" href="http://getbootstrap.com/dist/css/bootstrap.min.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="wrapper">
<div class="input-group">
<input type="hidden" value="" data-bind="value: item_id" />
<input class="form-control" type="search" data-bind="value: item_name" />
<span class="input-group-btn">
<button class="btn" data-bind="click: addItem, enable: function(){ item_name().length > 0;}">Add</button>
</span>
</div>
<ul class="list-group" data-bind="template: { name: 'item-template', data: $root.items}">
<li class="list-group-item">
<span id="123" data-bind="text: item_name, attr: {'id': item_id}">Americanino</span>
<span class="glyphicon glyphicon-remove-circle" data-bind="click: $parent.removeItem"></span>
</li>
<li class="list-group-item">
<span id="223" data-bind="text: item_name, attr: {'id': item_id}">Asos</span>
<span class="glyphicon glyphicon-remove-circle" data-bind="click: $parent.removeItem"></span>
</li>
</ul>
<script type="text/html" id="item-template">
<!--ko foreach: $data-->
<li class="list-group-item">
<span id="" data-bind="text: item_name, attr: {'id': item_id}"></span>
<span class="glyphicon glyphicon-remove-circle" data-bind="click: $root.removeItem"></span>
</li>
<!-- /ko -->
</script>
</div>
CSS
.wrapper {
width: 300px;
}
.input-group {
margin-bottom: 20px;
}
.glyphicon {
float: right;
cursor: pointer;
color: #5577CC;
}
JavaScript
function item(id, name){
var self = this;
self.item_id = ko.observable(id);
self.item_name = ko.observable(name);
}
function create_list(exiting_list){
var arr_list = [];
$(exiting_list).find('li').each(function(e,li){
var id = $(li).find('span').prop('id');
var name = $(li).find('span').html();
arr_list.push({
item_id: id,
item_name: name
});
});
return arr_list;
}
var itemListModel = function() {
var self = this;
// Data
var exiting_list = $('.list-group').clone();
self.items = ko.observableArray(create_list(exiting_list));
self.item_name = ko.observable('');
self.item_id = ko.observable('');
// Operations
self.addItem = function() {
if (self.item_name() != "") {
self.items.push(new item(self.item_id(),self.item_name()));
self.item_name("");
}
}.bind(self);
// Remove brand
self.removeItem = function(item) {
self.items.remove(item);
}
};
ko.applyBindings(new itemListModel());