summaryrefslogtreecommitdiffstats
path: root/acf/model
diff options
context:
space:
mode:
Diffstat (limited to 'acf/model')
-rw-r--r--acf/model/init.lua19
-rw-r--r--acf/model/model.lua8
-rw-r--r--acf/model/node.lua2
3 files changed, 14 insertions, 15 deletions
diff --git a/acf/model/init.lua b/acf/model/init.lua
index 2800ab6..71d0744 100644
--- a/acf/model/init.lua
+++ b/acf/model/init.lua
@@ -205,8 +205,9 @@ function Set.save_member(node, k, v) set.add(node, v) end
-- experimental
Mixed = class(Collection)
-function Mixed:init()
- super(self, Mixed):init({type=Mixed}, node.Mixed)
+function Mixed:init(params)
+ params.type = Mixed
+ super(self, Mixed):init(params, node.Mixed)
end
function Mixed:load(context)
@@ -224,14 +225,10 @@ end
RootModel = new()
-function RootModel:init(txn) super(self, RootModel):init{txn=txn, path='/'} end
+function RootModel:init(txn)
+ super(self, RootModel):init{txn=txn, path='/', addr='/volatile'}
+end
-function register(name, path, field)
- local field = to_field(field)
- function field:compute(context)
- context.path = '/'..name
- context.addr = path
- return self:load(context)
- end
- RootModel[name] = field
+function register(name, addr, field)
+ RootModel[name] = to_field(field, addr)
end
diff --git a/acf/model/model.lua b/acf/model/model.lua
index 7c27b50..0a312a3 100644
--- a/acf/model/model.lua
+++ b/acf/model/model.lua
@@ -20,9 +20,11 @@ local isinstance = object.isinstance
local util = require('acf.util')
-function to_field(obj)
- if object.issubclass(obj, Model) then return fld.Model{model=obj} end
- return getmetatable(obj).class and obj or obj()
+function to_field(obj, addr)
+ if object.issubclass(obj, Model) then
+ return fld.Model{model=obj, addr=addr}
+ end
+ return getmetatable(obj).class and obj or obj{addr=addr}
end
diff --git a/acf/model/node.lua b/acf/model/node.lua
index cf3111d..3960b90 100644
--- a/acf/model/node.lua
+++ b/acf/model/node.lua
@@ -36,7 +36,7 @@ function BoundField:init(parent, field)
txn=pmt.txn,
parent=parent,
path=pth.join(pmt.path, name),
- addr=pmt.addr and pth.join(pmt.addr, name)
+ addr=field.addr or pth.join(pmt.addr, name)
},
unpack(arg)
)