Skip to content

dmitrytarassov/d-binding

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 

Repository files navigation

D

D - JavaScript MVVM Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! На Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ 100% legacy code!

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ основан Π½Π° Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ двустороннСм савязывании Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ шаблона.

Код ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ писался ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ "Для сСбя", ΠΊΠ°ΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ двустороннСго савязывания Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° чистом JS (ES 2015), ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ синтаксиса использовался vue.js.

ИспользованиС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π² production Π½Π΅ привСтствуСтся.

Бвойства ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

$data: Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

$methods: доступныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

watch: отслСТиваниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

template: Π¨Π°Π±Π»ΠΎΠ½ для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°

$components: всС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

$parent: Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

$root: root ΠΊΠΎΠΏΠΎΠΌΠ½Π΅Π½Ρ‚

Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ событий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Observer

$on: ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° событиСм

$emit: ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ событиС

Бписок Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²

  • d-bind:[[prop name]]
  • d-text
  • d-class
  • d-if (Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° d-show)
  • d-click
  • d-model
  • d-enter (Π² ΠΏΠ»Π°Π½Π°Ρ… рСализация d-keydown)
  • d-for

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ прилоТСния

<div id="app">
	<component_test></component_test>
</div>
D.component("component_test", {
	template: `
        <div>Test</div>
    `
});

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-bind:[[prop_name]]

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ

Π”ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π² [[prop_name]] Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

D.component("component_test", {
	template: `
        <div>
			<component_user
				d-bind:user="current_user"></component_user>
        </div>
    `,
    data: {
    	current_user: {
    		name: "Mars"
    	}
    }
});

D.component("component_user", {
	template: `
		<span d-text="user.name"></span>
	`,
	data: {
		user: {}
	}
});

out

<div>
    <component_user d-bind:user="current_user">
        <span d-text="user.name">Mars</span>
    </component_user>
</div>

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-text

app

D.component("component_test", {
	template: `
        <div d-text="name"></div>
    `,
    data: {
        name: "Your name"
    }
});

out

<div d-text="name">Your name</div>

app

D.component("component_test", {
	template: `
        <div>
            <span d-text="user.name"></span><span d-text="user.sec_name"></span>
        </div>
    `,
    data: {
        user: {
            name:"Name",
            sec_name: "Second name"
        }
    }
});

out

<div>
    <span d-text="user.name">Name</span><span d-text="user.sec_name">Second name</span>
</div>

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-class

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования

  • ΠŸΡ€ΡΠΌΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ свойству d-class="class_name"
  • ИспользованиС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ d-class="some ? 'class_one' : 'class_two'"
  • ИспользованиС синтаксиса d-class="class_name if expression"

app

D.component("component_test", {
	template: `
        <div d-class="class_name"></div>
    `,
    data: {
        class_name: "test_class"
    }
});

out

<div d-class="class_name" class="test_class"></div>

app

D.component("component_test", {
	template: `
        <div d-class="list.length > 0 ? 'active' : 'disabled'" class="button">Send</div>
    `,
    data: {
        list: ['one', 'two']
    }
});

out

<div d-class="class_name" class="active"></div>

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-if (Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° d-show)

ИспользованиС:

  • d-if="expression"

app

D.component("component_test", {
	template: `
        <div d-if="show">Test</div>
    `,
    data: {
        show: true
    }
});

out

<div d-if="show">Test</div>

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-click

D.component("component_test", {
	template: `
        <div d-click="Hello">Hello</div>
    `,
    methods: {
        Hello: function() {
            alert("Hello")
        }
    }
});

out

alert("Hello")

D.component("component_test", {
	template: `
        <div d-click="Hello(name)">Hello</div>
    `,
    data: {
    	name: "Your name"
    },
    methods: {
        Hello: function() {
            alert("Hello, " + this.$data.name)
        }
    }
});

out

alert("Hello Your name")

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-model

БвязываСт value inpput, select, textarea с Π΄Π°Π½Π½Ρ‹ΠΌΡ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

app

D.component("component_test", {
	template: `
        <select d-model="select">
			<option value="1">One</option>
			<option value="2">Two</option>
        </select>
    `,
    data: {
    	select: 2
    }
});

out

<select d-model="select">
	<option value="1">One</option>
	<option selected value="2">Two</option>
</select>

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-enter (Π² ΠΏΠ»Π°Π½Π°Ρ… рСализация d-keydown)

ΠΠ°Π²Π΅ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ keydown Π½Π° элСмСнт, ΠΈ срабатываСт Ссли Π½Π°ΠΆΠ°Ρ‚ Enter

D.component("component_test", {
	template: `
        <input d-enter="Foo" />
    `,
    methods: {
    	Foo: function() {
    		alert("Enter")
    	}
    }
});

out

alert("Enter")

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° d-for

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ½ΠΎΠ³ΠΎ использования участков ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ΠŸΡ€ΠΈ использовании d-for Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ парсинг Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² d-for ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

app

D.component("component_test", {
	template: `
        <div d-for="el in list">
			<span d-text="el"></span>
        </div>
    `,
    data: {
    	list: [
    		"One",
    		"Two"
    	]
    }
});

out

<div d-for="el in list" d-path-d-for="true">
	<span d-text="el">One</span>
	<span d-text="el">Two</span>
</div>

app

D.component("component_test", {
	template: `
        <div d-for="el in list">
			<component_user
				d-bind:name="el"></component_user>
        </div>
    `,
    data: {
    	list: [
    		"Dima",
    		"Dasha"
    	]
    }
});

D.component("component_user", {
	template: `
		<span d-text="name"></span>
	`,
	data: {
		name: ""
	}
});

out

<div d-for="el in list" d-path-d-for="true">
    <component_user d-bind:name="el">
        <span d-text="name">Dima</span>
    </component_user>
    
    <component_user d-bind:name="el">
        <span d-text="name">Dasha</span>
    </component_user>
</div>

About

MVVM Javascript Framework

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published