Member 12674274 Ответов: 1

Сделать knockout.js скрипты работают


Я хотел бы знать, как я могу сделать два ko.js скрипты работают в данный момент один отменяется первым отдельным они отлично работают может кто нибудь мне помочь

<script>
$('#addText').click(function (e) {
	/** Make div draggable **/
	$('<div />', {
		class: 'ui-widget-content',
		appendTo: '.container',
		draggable: {
			containment: 'parent',
			start: function( event, ui ) {
				$(this).css('z-index', ++z);
			}
		}
	});
});


$(document).on("dblclick", '.text', function()
{
	$(this).hide(); $(this).closest('.item').find('.edit_text').val($(this).text()).show();
});

$(document).on("click", ".edit_text", function()
{
	return false;
});


$(document).on("click", function()
{
	var editingText = $('.edit_text:visible');
	if (editingText.length)
	{
		editingText.hide();
		editingText.closest('.item').find('.text').text($(editingText).val()).show();
	}
});


var count = 1;
var selectedDraggable;

ko.bindingHandlers.draggable={
	init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
		$(element).draggable();
		$(element).addClass('item' + count);
		count++;
		$(element).on('click', function () {
			selectedDraggable = $(this);
		})
	}
};


var vm=function(){
	var self=this;
	self.items=ko.observableArray();
	self.textContent = ko.observable('');
	self.init=function(){
		self.items([]);
	}
	self.remove=function(item){
		console.log(item);
		self.items.remove(item);
	}
	self.addNew = function() {
		self.items.push( self.textContent() );
		self.textContent('');
	}
	self.init();
}

ko.applyBindings(new vm());






var z = 1; //value to make div overlappable

$('#addText').click(function (e) {
	/** Make div draggable **/
	$('<div />', {
		class: 'ui-widget-content',
		appendTo: '.container4',
		draggable: {
			containment: 'parent',
			start: function( event, ui ) {
				$(this).css('z-index', ++z);
			}
		}
	});
});


$(document).on("dblclick", '.text1', function()
{
	$(this).hide(); $(this).closest('.item1').find('.edit_text1').val($(this).text()).show();
});

$(document).on("click", ".edit_text1", function()
{
	return false;
});


$(document).on("click", function()
{
	var editingText = $('.edit_text1:visible');
	if (editingText.length)
	{
		editingText.hide();
		editingText.closest('.item1').find('.text1').text($(editingText).val()).show();
	}
});


var count = 1;
var selectedDraggable;

ko.bindingHandlers.draggable={
	init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
		$(element).draggable();
		$(element).addClass('item1' + count);
		count++;
		$(element).on('click', function () {
			selectedDraggable = $(this);
		})
	}
};


var vm=function(){
	var self=this;
	self.items1=ko.observableArray();
	self.textContent1 = ko.observable('');
	self.init=function(){
		self.items1([]);
	}
	self.remove=function(item){
		console.log(item);
		self.items1.remove(item);
	}
	self.addNew1 = function() {
		self.items1.push( self.textContent1() );
		self.textContent1('');
	}
	self.init();
}

ko.applyBindings(new vm());</script>


Что я уже пробовал:

Я перепробовал все что мне говорили мне сказали объединить их но я не знаю как это сделать

Patrice T

Показать код

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

Member 12674274

вы нашли решение?

1 Ответов

Рейтинг:
0

Adam R Harris

Ваша проблема заключается в том, что вы не ориентируетесь на элементы, к которым хотите применить привязки с помощью вызова ko.applyBindings.

обратите внимание, что не используйте одну и ту же переменную виртуальной машины для моделей представления. это вызовет кошмар позже, когда просто используйте vm1 & vm2, но я бы рекомендовал что-то более описательное.

Я предполагаю, что у вас есть 2 дива, к которым вы хотите применить свои шаблоны, давайте назовем их temp1 & temp2. Ваш код для установки шаблонов с различными моделями представления должен быть


/* code to prepare first view model */
var vm1 = ...
/* code to prepare second view model */
var vm2 = ...

/* bind the view models */
ko.applyBindings(vm1, document.getElementById("temp1"));
ko.applyBindings(vm1, document.getElementById("temp2"));


обратите внимание, как я передаю элемент DOM в качестве второго параметра вызову applyBindings? вот как вы ориентируетесь только на определенный шаблон при применении Привязок.

К сожалению, это все, что может сказать об этом документация: Нокаут: Активация Нокаута[^]

Также: взгляните на Нокаут: привязка "щелчок"[^] для кнопку функции.